Problem Statement
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
Problem link
Video Tutorial
You can find the detailed video tutorial here
Thought Process
Straight forward question, could use Spiral Matrix exact same recursion algorithm to solve this, you can also watch that video tutorial here
Still needs pay attribute to this guy, had another great solution:
https://leetcode.com/problems/spiral-matrix-ii/discuss/22282/4-9-lines-Python-solutions
Solutions
1 public int[][] generateMatrix(int n) { 2 assert n >= 0; 3 4 int[][] res = new int[n][n]; 5 6 this.generateMatrixHelper(0, 0, n, n, res, 1); 7 return res; 8 } 9 10 private void generateMatrixHelper( 11 int i, 12 int j, 13 int rowSize, 14 int colSize, 15 int[][] matrix, 16 int num 17 ) { 18 if (rowSize <= 0 || colSize <= 0) { 19 return; 20 } 21 22 if (rowSize == 1 && colSize == 1) { 23 matrix[i][j] = num; 24 return; 25 } 26 if (rowSize == 1) { 27 for (int k = j; k < j + colSize; k++) { 28 matrix[i][k] = num; 29 num++; 30 } 31 return; 32 } 33 34 if (colSize == 1) { 35 for (int k = i; k < i + rowSize; k++) { 36 matrix[k][j] = num; 37 num++; 38 } 39 return; 40 } 41 42 // do the spiral 43 for (int k = j; k < j + colSize; k++) { 44 matrix[i][k] = num++; 45 } 46 47 for (int k = i + 1; k < i + rowSize; k++) { 48 matrix[k][j + colSize - 1] = num++; 49 } 50 51 for (int k = j + colSize - 2; k >= i; k--) { 52 matrix[i + rowSize - 1][k] = num++; 53 } 54 55 for (int k = i + rowSize - 2; k > i; k--) { // both the start and end need to be i, j, and also care about length 56 matrix[k][j] = num++; 57 } 58 59 this.generateMatrixHelper(i + 1, j + 1, rowSize - 2, colSize - 2, matrix, num); 60 }
Simulation using Recursion
Time Complexity: O(M*N) where M, N is row and col of matrix
Space Complexity: O(M*N) since we used list to store the result, where M, N is row and col of matrix