C语言刷代码随想录--螺旋矩阵2.0

文章讲述了在LeetCode中的一个题目,涉及如何使用循环策略填充一个矩阵,关键在于正确处理边界并保证每次循环操作一致。
摘要由CSDN通过智能技术生成

原题LeetCode链接:. - 力扣(LeetCode)

这是一道纯粹的模拟题,基本思路为:

1.分层次从左到右、从上到下、从右到左、从下到上依次进行进行填充;循环次数为n/2

2.n为奇数,则中间需要填充最后一个数(偶数正好最后一个循环填满)

循环模拟题需要确定边界,题解确定为左闭右开的原则,逐层遍历

代码如下:

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
    *returnSize=n;//返回数组一维大小
    *returnColumnSizes=(int*)malloc(sizeof(int)*n);//二维大小

    int** res=(int**)malloc(sizeof(int*)*n);//结果数组n列
    for(int i=0;i<n;i++){
        res[i]=(int*)malloc(sizeof(int)*n);//n行
        (*returnColumnSizes)[i]=n;//结果每行n维
        }
    int count=1;
    //遍历要求:左闭右开
    for(int loop=0;loop<n/2;loop++){
        for(int i=loop;i<n-1-loop;i++)
            res[loop][i] = count++;//从左到右
        for(int i=loop;i<n-loop-1;i++)
            res[i][n-1-loop]=count++;//从上到下
        for(int i=loop;i<n-loop-1;i++)
            res[n-loop-1][n-i-1]=count++;//从右到左
        for(int i=loop;i<n-loop-1;i++)
            res[n-i-1][loop]=count++;//从下到上
    }

    if(n%2==1)
        res[n/2][n/2]=count;//奇数则填入最后一个数字
    return res;
}

总结:所有循环模拟题,最重要的就是确认边界,尽可能确保每一次循环所干的事情相同,且最终能够完全模拟结果

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值