历时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