力扣59-螺旋矩阵-C++简单易懂

该博客介绍了如何生成一个按顺时针螺旋排列的正方形矩阵。通过设置并更新四个边界,依次填充矩阵的四个方向,从而实现螺旋填充。示例展示了对于输入n=3和n=1的情况,输出了对应的螺旋矩阵。代码中提供了一个C++的解决方案,详细解释了每一步的操作过程。
摘要由CSDN通过智能技术生成

一、运行结果

 

二、题目

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:

输入:n = 1
输出:[[1]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii

三、思路

设置四个变量作为四个边界,分别为top, right, bottom, left,从最左上角的格子开始进行顺时针遍历,先从左到右填最上边的行,再从上到下填最右边的列,然后从右到左填最下边的行,最后从下到上填最左边的列,每填完一行或一列,相应的边界值就往中间移,用一个变量curnum 记录当前格子应该填入的值,每填一个值就加一,重复上述操作直至填满整个矩阵。

四、代码

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));
        int top = 0, left = 0, bottom = n-1, right = n -1;  //四边界
        int curnum = 1;    //每个格子填入的数字
        while(top <= bottom && left <= right){
            for(int i=left; i<=right; i++){ //上边 左→右
                ans[top][i] = curnum;
                curnum++;
            }
            top++;   //上边界下移
            for(int i=top; i<=bottom; i++){ //右边 上→下
                ans[i][right] = curnum;
                curnum++;
            }
            right--;  //右边界左移
            for(int i=right; i>=left; i--){ //下边 右->左
                ans[bottom][i] = curnum;
                curnum++;
            }
            bottom--;  //下边界上移
            for(int i=bottom; i>=top; i--){  //左边 下→上
                ans[i][left] = curnum;
                curnum++;
            }
            left++;  //左边界右移
        }
        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值