Given an integer n, generate a square matrix filled with elements from 1 to n2(Square(n)) in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
1 public static List<List<int>> SparialMatrixII(int n) 2 { 3 List<List<int>> ret = new List<List<int>>(); 4 if (n == 0) 5 return ret; 6 if (n == 1) 7 { 8 ret.Add(new List<int> { 1 }); 9 return ret; 10 } 11 12 for (int i = 1; i <= n; i++) 13 { 14 ret.Add(new List<int>(n)); 15 } 16 17 int num = 1; 18 19 for (int i = 0; i <= n / 2; i++) 20 { 21 for (int col = i; col <= n - 1 - i; col++) 22 ret[i][col] = num++; 23 for (int row = i + 1; row <= n - 1 - i; row++) 24 ret[row][n - 1 - i] = num++; 25 for (int col = n - 1 - i - 1; col >= i; col--) 26 ret[n - 1 - i][col] = num++; 27 for (int row = n - 1 - i - 1; row >= i + 1; row--) 28 ret[row][i] = num++; 29 } 30 31 return ret; 32 }
代码分析:
简单,不过要小心。。。