力扣59.螺旋矩阵

class Solution 
{
public:
    vector<vector<int>> generateMatrix(int n) 
    {
        vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定义一个二维数组
        int startx=0,starty=0;
        int count=1;//通过count++来给每个位置赋值
        int f=n/2;//转的圈数
        int t=1;//每转一圈t++,依次来空出顶点位置不处理
        int i,j;
        while(f--)//每一圈都进行以下操作
        {
            i=startx,j=starty;
            for(j;j<n-t;j++)
            {
                res[i][j]=count++;
            }//出循环时j=n-t,也就是处于顶点位置
            for(i;i<n-t;i++)
            {
                res[i][j]=count++;
            }
            for(j;j>starty;j--)
            {
                res[i][j]=count++;
            }
            for(i;i>startx;i--)
            {
                res[i][j]=count++;
            }
            startx++;//每转一圈都要缩圈
            starty++;
            t++;
        }
        if(n%2==1) res[n/2][n/2]=count++;
        return res;
    }
};
/*每次转一圈就增加两行,一共是n行n列,转几圈就看n里有几个2,用n/2
eg: 1  2  3  4 可以理解为转一圈增加第一行和第四行
    12 13 14 5
    11 16 15 6
    10 9  8  7   
  若n为奇数,则需要把中间的位置单独赋值
  中间的位置为[n/2][n/2]
  需要注意使用左闭右开的方法,不然结点会混乱
  最上行只管左上角顶点,最右的列只管右上角顶点
  最下行只管右下角顶点,最左列只管左下角顶点*/     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值