leetcode day22 59

59 螺旋矩阵

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

示例 1:

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

示例 2:

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

写在前面:malloc分配二维数组m*n内存的方法

int **a=(int**)malloc(sizeof(int*)*m);

for(int i=0;i<m;i++){

   a[i]=(int*)malloc(sizeof(int)*n);

}

*returnSize返回数组列数

*returnColumnSizes=(int *)malloc(sizeof(int)*m);//返回行数也要分配内存

  (*returnColumnSizes)[i]=n;//第i行的列数为n

解题思路:采用左闭右开的思想。每次最后面的一个不处理。

设置循环初始位置,x=0,y=0

确定循环圈数 loop=n/2,最后圈数是奇数中间位置要填充一个

设置一个偏移量offset,每次循环x++,y++,loop--,offset++

模拟题意即可。

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
    *returnSize=n;//返回数组列数
    *returnColumnSizes=(int *)malloc(sizeof(int)*n);//返回行数
    //二维数组分配内存空间
    int **num=(int **)malloc(sizeof(int *)*n);
    int i,j;
    for(i=0;i<n;i++){
        num[i]=(int *)malloc(sizeof(int)*n);//分配列
        (*returnColumnSizes)[i]=n;//第i行的列数为n
    }
    int x=0,y=0;//起始位置
    int offset=1,cnt=1;
    int loop=n/2;//循环圈数
    for(loop=n/2;loop>0;loop--){
        for(j=y;j<n-offset;j++){
           num[x][j]=cnt++;
        }
        for(i=x;i<n-offset;i++){
            num[i][j]=cnt++;
        }
        for(j=n-offset;j>y;j--){
            num[i][j]=cnt++;
        }
        for(i=n-offset;i>x;i--){
            num[i][j]=cnt++;
        }
        x++;
        y++;
        offset++;
    }
    if(n%2!=0)num[x][y]=cnt;//奇数,填充中间的
    return num;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值