59. Spiral Matrix II
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 ] ]
这道题和【面上编程题】-8剑指offer之解决面试题的思路 中顺序打印矩阵类似。
要生成的矩阵是个正方形,按右,下,左,上的顺序访问正方形的边界,插入数。每次循环完一遍,缩小正方形行列的范围。
public class Solution {
public int[][] generateMatrix(int n) {
int[][] res=new int[n][n];
int k=1; //保存的数
int i=0,j=0; //坐标
int h=n,l=0; //正方形的行列的范围
int MAX=n*n;
while(k<=MAX){
//向右
while(k<=MAX && j<h){
res[i][j++]=k++;
}
j--;
i++;
//向下
while(k<=MAX && i<h){
res[i++][j]=k++;
}
i--;
j--;
//向左
while(k<=MAX && j>=l){
res[i][j--]=k++;
}
j++;
i--;
//向上
while(k<=MAX && i>l){
res[i--][j]=k++;
}
i++;
j++;
h--;
l++;
}
return res;
}
}