题目链接:https://leetcode.com/problems/spiral-matrix-ii/
题目:
n, generate a square matrix filled with elements from 1 to n2
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
思路:
1、由外向内一圈一圈的计算,首先计算有几圈,用dim表示,根据dim控制循环次,复杂的地方在于判断每圈每段的起始位置。这种方法思路简单,实现麻烦。
2、用递归实现,参考 http://fisherlei.blogspot.com/2013/04/leetcode-spiral-matrix-ii-solution.html 看起来也挺费劲的。
算法1:
public int[][] generateMatrix(int n) {
int matrix[][] = new int[n][n];
int dim = n / 2;
if (n % 2 != 0)
dim++;
int s = 1;
for (int i = 0; i < dim; i++) {
for (int j = i; j < n - i; j++) {//上
matrix[i][j] = s;
s++;
}
for (int x = i + 1; x < n - i; x++) {//右
matrix[x][n - i - 1] = s;
s++;
}
for (int x = n - 2 - i; x >= i; x--) {//下
matrix[n - 1 - i][x] = s;
s++;
}
for (int x = n - 2 - i; x > i; x--) {//左
matrix[x][i] = s;
s++;
}
}
return matrix;
}