历时2个小时弄懂了螺旋矩阵的代码;
小结如下:
问题:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
这里以第一个元素为基准元素,不断寻找数组打印的边界index,同时每次更新基准元素,(row > starty*2 && column > startx*2)为边界条件,每次用endx = column - startx - 1;endy = row - starty - 1来更新下标
public class Solution {
public int[][] generateMatrix(int n){
//means the max of index;
int[][] ans = new int[n][n];
if(n <= 0){
System.out.println("print error!");
}
int row = n;
int column = n;
int startx = 0,starty = 0,endx,endy,i,j;
int count = 1;
while(row > starty*2 && column > startx*2) {
endx = column - startx - 1;
endy = row - starty - 1;
//从左向右打印;
for(j = startx; j <= endx; ++j) {
ans[starty][j] = count;
++count;
}
//从上向下打印
for(i = starty+1; i <= endy; ++i) {
ans[i][endx] = count;
++count;
}
//从右向左打印
for(j = endx-1; j >= startx; --j) {
ans[endy][j] = count;
++count;
}
//从下向上打印
for(i = endy-1; i >= starty+1; --i) {
ans[i][startx] = count;
++count;
}
//基准元素发生变化;
++startx;
++starty;
}
return ans;
}
}
AC
参考文章: 点击打开链接