力扣题目地址
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
这题并不涉及什么算法和思想,但是很考验对代码掌握程度。看似简单,但要完整的写出运行免不了磕碰。
首先要确定遍历每一条边时边界的选择,最好每条边采取一致的边界处理。这里我选择的是每一条边保留最后一个作为下一条边的开始,例如n=4,第一条边遍历只处理nums0至nums0,第二条边处理nums0至nums2;如此往复。
例外需要注意的是,当n为奇数时,矩阵中央会剩余一个需要另外进行赋值。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int startx=0,starty=0;//遍历从何处开始
int offset=1;//遍历从何处结束
int loop=n/2;//需要进行多少次画圈循环
int count=1;
vector<vector<int>> nums(n, vector<int>(n, 0));//定义一个二维数组
int i,j;
int temp=n%2;
while(loop--){
i=startx;
j=starty;
//每一行/列都保留最后一个给下一行/列处理
for(j=starty;j<n-offset;j++){
nums[startx][j]=count++;
}
for(i=startx;i<n-offset;i++){
nums[i][j]=count++;
}
for(;j>starty;j--){//此时i,j都已经到达正确位置(即矩阵中右下角)不需要进行处理
nums[i][j]=count++;
}
for(;i>startx;i--){
nums[i][j]=count++;
}
startx++;
starty++;
offset+=1;
}
if(temp==1){
nums[n/2][n/2]=count;
}
return nums;
}
};
评论 (0)