题目:
给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
解析:
这道题主要就是考察模拟的能力。
模拟顺时针遍历数组矩阵的过程。
分为四步:
模拟上侧从左到右
模拟右侧从上到下
模拟下侧从右到左
模拟左侧从下到上
在模拟过程中,要遵循左闭右开的原则,仔细考虑每一处的边界条件。
代码:
class Solution {
public int[][] generateMatrix(int n) {
int[][] result=new int[n][n];
int loop=n/2; //循环几次
int mid=n/2; //中间位置
int count=1; //每个位置的值
int offset=1; //每次循环遍历的长度
int startx=0,starty=0;
while(loop>0){
int i = startx;
int j = starty;
for(;j< n+starty-offset;j++){ // 模拟上侧从左到右
result[startx][j]=count++;
}
for(;i<n+startx-offset;i++){ // 模拟右侧从上到下
result[i][j]=count++;
}
for(;j>starty;j--){ // 模拟下侧从右到左
result[i][j]=count++;
}
for(;i>startx;i--){ // 模拟左侧从下到上
result[i][j]=count++;
}
startx++;
starty++;
offset+=2;
loop--;
}
if(n%2!=0){
result[mid][mid]=n*n;
}
return result;
}
}