Bird
Raised Fist0
DSA C#programming~20 mins

Spiral Matrix Traversal in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Spiral Matrix Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Spiral Traversal on 3x3 Matrix
What is the output of the following C# code that prints elements of a 3x3 matrix in spiral order?
DSA C#
int[,] matrix = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

List<int> result = new List<int>();
int top = 0, bottom = 2, left = 0, right = 2;

while (top <= bottom && left <= right) {
    for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
    top++;
    for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
    right--;
    if (top <= bottom) {
        for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
        bottom--;
    }
    if (left <= right) {
        for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
        left++;
    }
}

Console.WriteLine(string.Join(", ", result));
A1, 3, 5, 7, 9, 2, 4, 6, 8
B1, 2, 3, 6, 9, 8, 7, 4, 5
C1, 4, 7, 8, 9, 6, 3, 2, 5
D1, 2, 3, 4, 5, 6, 7, 8, 9
Attempts:
2 left
💡 Hint
Follow the boundaries top, bottom, left, right and move inward in spiral.
❓ Predict Output
intermediate
2:00remaining
Spiral Traversal Output for 2x4 Matrix
What is the output of the spiral traversal code on this 2x4 matrix?
DSA C#
int[,] matrix = {
  {1, 2, 3, 4},
  {5, 6, 7, 8}
};

List<int> result = new List<int>();
int top = 0, bottom = 1, left = 0, right = 3;

while (top <= bottom && left <= right) {
    for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
    top++;
    for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
    right--;
    if (top <= bottom) {
        for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
        bottom--;
    }
    if (left <= right) {
        for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
        left++;
    }
}

Console.WriteLine(string.Join(", ", result));
A1, 2, 3, 4, 8, 7, 6, 5
B1, 2, 3, 4, 5, 6, 7, 8
C1, 5, 6, 7, 8, 4, 3, 2
D1, 4, 8, 7, 6, 5, 2, 3
Attempts:
2 left
💡 Hint
Traverse top row, then right column, then bottom row reversed, then left column reversed.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Spiral Traversal Code
The following code attempts spiral traversal but produces incorrect output. What is the bug?
DSA C#
int[,] matrix = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

List<int> result = new List<int>();
int top = 0, bottom = 2, left = 0, right = 2;

while (top < bottom && left < right) {
    for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
    top++;
    for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
    right--;
    for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
    bottom--;
    for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
    left++;
}

Console.WriteLine(string.Join(", ", result));
AThe result list is not cleared before traversal causing duplicate output
BThe for loops should iterate in reverse order for top and right boundaries
CThe variables top and bottom are swapped in the code causing wrong indexing
DThe while loop condition should use <= instead of < to include last row and column
Attempts:
2 left
💡 Hint
Check the loop condition carefully to ensure all rows and columns are included.
🧠 Conceptual
advanced
1:30remaining
Number of Layers in Spiral Traversal
For an MxN matrix, how many layers (or rings) does the spiral traversal algorithm process?
AMath.Min(M, N) / 2 rounded up
BMath.Max(M, N) / 2 rounded down
CMath.Min(M, N) / 2 rounded down
DMath.Max(M, N) / 2 rounded up
Attempts:
2 left
💡 Hint
Each layer removes one row from top and bottom and one column from left and right.
🚀 Application
expert
2:30remaining
Final Spiral Traversal Output for 4x4 Matrix
What is the output of spiral traversal on this 4x4 matrix?
DSA C#
int[,] matrix = {
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12},
  {13, 14, 15, 16}
};

List<int> result = new List<int>();
int top = 0, bottom = 3, left = 0, right = 3;

while (top <= bottom && left <= right) {
    for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
    top++;
    for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
    right--;
    if (top <= bottom) {
        for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
        bottom--;
    }
    if (left <= right) {
        for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
        left++;
    }
}

Console.WriteLine(string.Join(", ", result));
A1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
B1, 5, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2, 6, 10, 11, 7
C1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
D1, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10, 2, 3
Attempts:
2 left
💡 Hint
Follow the spiral from outer layer to inner layer carefully.

Practice

(1/5)
1. What is the main idea behind Spiral Matrix Traversal?
easy
A. To visit all elements of a matrix in a spiral order starting from the top-left corner
B. To sort the matrix elements in ascending order
C. To find the maximum element in each row of the matrix
D. To transpose the matrix by swapping rows and columns

Solution

  1. Step 1: Understand traversal pattern

    Spiral traversal means visiting matrix elements starting from the outer layer and moving inward in a circular pattern.
  2. Step 2: Identify the traversal goal

    The goal is to visit every element exactly once in a spiral order, usually starting from the top-left corner.
  3. Final Answer:

    To visit all elements of a matrix in a spiral order starting from the top-left corner -> Option A
  4. Quick Check:

    Spiral traversal = visiting elements in spiral order [OK]
Hint: Think of peeling an onion layer by layer in a circle [OK]
Common Mistakes:
  • Confusing spiral traversal with sorting
  • Thinking it only visits diagonal elements
  • Assuming it transposes the matrix
2. Which of the following C# code snippets correctly initializes the boundaries for spiral traversal of a matrix named matrix?
easy
A. int top = 0, bottom = matrix.Length - 1, left = 0, right = matrix.GetLength(0) - 1;
B. int top = 1, bottom = matrix.Length, left = 1, right = matrix.Length;
C. int top = matrix.GetLength(1), bottom = 0, left = matrix.GetLength(0), right = 0;
D. int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1;

Solution

  1. Step 1: Understand matrix dimensions in C#

    matrix.GetLength(0) gives number of rows, matrix.GetLength(1) gives number of columns.
  2. Step 2: Set boundaries correctly

    Top and left start at 0; bottom and right are last indices (length - 1) for rows and columns respectively.
  3. Final Answer:

    int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1; -> Option D
  4. Quick Check:

    Correct boundary initialization = int top = 0, bottom = matrix.GetLength(0) - 1, left = 0, right = matrix.GetLength(1) - 1; [OK]
Hint: Use GetLength(0) for rows, GetLength(1) for columns [OK]
Common Mistakes:
  • Using matrix.Length which is total elements, not rows or columns
  • Swapping rows and columns in GetLength calls
  • Starting boundaries at 1 instead of 0
3. What is the output of the following C# code snippet for spiral traversal?
int[,] matrix = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

List<int> result = new List<int>();
int top = 0, bottom = 2, left = 0, right = 2;

while (top <= bottom && left <= right) {
  for (int i = left; i <= right; i++) result.Add(matrix[top, i]);
  top++;
  for (int i = top; i <= bottom; i++) result.Add(matrix[i, right]);
  right--;
  if (top <= bottom) {
    for (int i = right; i >= left; i--) result.Add(matrix[bottom, i]);
    bottom--;
  }
  if (left <= right) {
    for (int i = bottom; i >= top; i--) result.Add(matrix[i, left]);
    left++;
  }
}
Console.WriteLine(string.Join(", ", result));
medium
A. 1, 2, 3, 6, 9, 8, 7, 4, 5
B. 1, 4, 7, 8, 9, 6, 3, 2, 5
C. 1, 2, 3, 4, 5, 6, 7, 8, 9
D. 9, 8, 7, 6, 5, 4, 3, 2, 1

Solution

  1. Step 1: Traverse top row left to right

    Elements added: 1, 2, 3; then top moves from 0 to 1.
  2. Step 2: Traverse right column top to bottom

    Elements added: 6, 9; right moves from 2 to 1.
  3. Step 3: Traverse bottom row right to left

    Elements added: 8, 7; bottom moves from 2 to 1.
  4. Step 4: Traverse left column bottom to top

    Elements added: 4; left moves from 0 to 1.
  5. Step 5: Repeat for inner layer

    Now top=1, bottom=1, left=1, right=1; add element 5.
  6. Final Answer:

    1, 2, 3, 6, 9, 8, 7, 4, 5 -> Option A
  7. Quick Check:

    Spiral order of 3x3 matrix = 1, 2, 3, 6, 9, 8, 7, 4, 5 [OK]
Hint: Follow boundaries and shrink after each side [OK]
Common Mistakes:
  • Not updating boundaries correctly after each side
  • Skipping the inner elements
  • Reversing traversal directions incorrectly
4. Identify the bug in this spiral traversal code snippet and select the fix:
int top = 0, bottom = matrix.GetLength(0), left = 0, right = matrix.GetLength(1) - 1;
while (top <= bottom && left <= right) {
  for (int i = left; i <= right; i++) Console.Write(matrix[top, i] + " ");
  top++;
  for (int i = top; i <= bottom; i++) Console.Write(matrix[i, right] + " ");
  right--;
  if (top <= bottom) {
    for (int i = right; i >= left; i--) Console.Write(matrix[bottom, i] + " ");
    bottom--;
  }
  if (left <= right) {
    for (int i = bottom; i >= top; i--) Console.Write(matrix[i, left] + " ");
    left++;
  }
}
medium
A. Change right to matrix.GetLength(1) to include last column
B. Change bottom to matrix.GetLength(0) - 1 to avoid index out of range
C. Remove the if conditions checking top <= bottom and left <= right
D. Initialize top and left to 1 instead of 0

Solution

  1. Step 1: Check boundary initialization

    bottom is set to matrix.GetLength(0), which is out of index range since indexing is zero-based.
  2. Step 2: Correct bottom boundary

    bottom should be matrix.GetLength(0) - 1 to point to the last valid row index.
  3. Final Answer:

    Change bottom to matrix.GetLength(0) - 1 to avoid index out of range -> Option B
  4. Quick Check:

    Zero-based indexing means last index = length - 1 [OK]
Hint: Remember zero-based indexing means last index = length - 1 [OK]
Common Mistakes:
  • Using length instead of length - 1 for last index
  • Removing boundary checks causing infinite loops
  • Starting indices at 1 instead of 0
5. Given a rectangular matrix of size 3x4:
int[,] matrix = {
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12}
};

What is the spiral traversal output?
hard
A. 1, 2, 3, 4, 8, 12, 9, 10, 11, 5, 6, 7
B. 1, 5, 9, 10, 11, 12, 8, 4, 3, 2, 6, 7
C. 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7
D. 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 7, 6

Solution

  1. Step 1: Traverse top row left to right

    Elements: 1, 2, 3, 4; top moves from 0 to 1.
  2. Step 2: Traverse right column top to bottom

    Elements: 8, 12; right moves from 3 to 2.
  3. Step 3: Traverse bottom row right to left

    Elements: 11, 10, 9; bottom moves from 2 to 1.
  4. Step 4: Traverse left column bottom to top

    Elements: 5; left moves from 0 to 1.
  5. Step 5: Traverse inner row left to right

    Elements: 6, 7; top moves from 1 to 2.
  6. Final Answer:

    1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7 -> Option C
  7. Quick Check:

    Spiral order of 3x4 matrix = 1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7 [OK]
Hint: Shrink boundaries after each side, watch rectangular shape [OK]
Common Mistakes:
  • Mixing order of inner elements
  • Skipping last inner row or column
  • Confusing left and right boundaries
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard