diff --git a/src/main/java/com/thealgorithms/others/SpiralMatrixII.java b/src/main/java/com/thealgorithms/others/SpiralMatrixII.java new file mode 100644 index 000000000000..68bdf992331a --- /dev/null +++ b/src/main/java/com/thealgorithms/others/SpiralMatrixII.java @@ -0,0 +1,47 @@ +package com.thealgorithms.others; +import java.util.Arrays; + +public final class SpiralMatrixII { + private SpiralMatrixII() { + } + static public int[][] generateMatrix(int size) { + int[][] result = new int[size][size]; + int num = 1; + int top = 0, bottom = size - 1, left = 0, right = size - 1; + + while (num <= size * size) { + // Traverse right + for (int i = left; i <= right && num <= size * size; i++) { + result[top][i] = num++; + } + top++; + + // Traverse down + for (int i = top; i <= bottom && num <= size * size; i++) { + result[i][right] = num++; + } + right--; + + // Traverse left + for (int i = right; i >= left && num <= size * size; i--) { + result[bottom][i] = num++; + } + bottom--; + + // Traverse up + for (int i = bottom; i >= top && num <= size * size; i--) { + result[i][left] = num++; + } + left++; + } + return result; + } + public static void main(String[] args) { + SpiralMatrixII solution = new SpiralMatrixII(); + int size = 3; + int[][] result = solution.generateMatrix(size); + for (int i = 0; i < size; i++) { + System.out.println(Arrays.toString(result[i])); + } + } +} diff --git a/src/test/java/com/thealgorithms/others/SpiralMatrixIITest.java b/src/test/java/com/thealgorithms/others/SpiralMatrixIITest.java new file mode 100644 index 000000000000..f61f344ba3fa --- /dev/null +++ b/src/test/java/com/thealgorithms/others/SpiralMatrixIITest.java @@ -0,0 +1,28 @@ +package com.thealgorithms.others; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +public class SpiralMatrixIITest { + + @Test + public void testGeneratedMatrixSize() { + int size = 3; // Change this to test different matrix sizes + int[][] result = SpiralMatrixII.generateMatrix(size); + assertEquals(size, result.length); + for (int i = 0; i < size; i++) { + assertEquals(size, result[i].length); + } + } + + @Test + public void testGeneratedMatrixCorrectness() { + int[][] expectedMatrix = {{1, 2, 3}, {8, 9, 4}, {7, 6, 5}}; + + int size = 3; + int[][] result = SpiralMatrixII.generateMatrix(size); + + assertArrayEquals(expectedMatrix, result); + } +}