题目
59.螺旋矩阵II
思路
- 遵循左闭右开,即一次填充一边,拐角处交给下一边来填充
解法
class Solution {
public int[][] generateMatrix(int n) {
int ans[][] = new int[n][n];
int k=1, nn=n*n;
int mini=0, maxi=n-1, minj=0, maxj=n-1; //
while(k < nn){
//遵循左闭右开,即一次填充一边,拐角处交给下一边来填充
for(int j = minj ; j < maxj ; j++) ans[mini][j] = k++; // →
for(int i = mini ; i < maxi ; i++) ans[i][maxj] = k++; // ↓
for(int j = maxj ; j > minj ; j--) ans[maxi][j] = k++; // ←
for(int i = maxi ; i > mini ; i--) ans[i][minj] = k++; // ↑
mini++; maxi--; minj++; maxj--; // 收窄
}
if(n%2 == 1) ans[mini][minj] = k; // 特判最后剩下的1*1矩阵
return ans;
}
}