Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路
根据第54题的思路这道题也变得相对简单
唯一需要修改的则是定义一个num每次遍历到一个位置把数字添加进去并且++
其他一模一样
本题唯一难点在于col和row容易搞混
row表示行再题中相当于y向量
col表示列再题中表示x向量
从左向右是y向量(col)不变 x向量(col)改变
…
r如果容易弄混
把 int rowBegin =0;
int rowEnd = n-1;
int colBegin =0;
int colEnd =n-1;
改为
up down left right 就很清晰了
class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
if(n <1){
return res;
}
int rowBegin =0;
int rowEnd = n-1;
int colBegin =0;
int colEnd =n-1;
int num = 1;
while(rowBegin<= rowEnd&&colBegin<=rowEnd){
for(int j = colBegin;j<=colEnd;j++){//从zuoxiangyou
res[rowBegin][j] = num++;
}
rowBegin++;
for(int j = rowBegin;j<=rowEnd;j++){//从左往右
res[j][colEnd] = num;
num++;
}
colEnd--;
if(rowBegin<=rowEnd){
for(int j = colEnd;j>=colBegin;j--){
res[rowEnd][j] = num;
num++;
}
rowEnd--;
}
if(colBegin<=colEnd){
for(int j = rowEnd;j>=rowBegin;j--){
res[j][colBegin] = num;
num++;
}
colBegin++;
}
}
return res;
}
}