Day01-力扣59 螺旋矩阵
侧边栏壁纸
  • 累计撰写 10 篇文章
  • 累计收到 7 条评论

Day01-力扣59 螺旋矩阵

子衿
2023-09-19 / 0 评论 / 5 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年09月24日,已超过844天没有更新,若内容或图片失效,请留言反馈。

力扣题目地址
给你一个正整数 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

评论 (0)

取消