打卡 59.螺旋矩阵Ⅱ

万事开头难在这里插入图片描述

处理好每一轮的起始位置和终止位置
在这里插入图片描述



/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
 //初始化返回结果数组ans
 *returnSize = n;
 *returnColumnSizes = (int*)malloc(sizeof(int)*n);
 int **ans = (int**)malloc(sizeof(int*)*n);
 int i,j;
 for(i = 0;i < n; i++){
     ans[i] = (int*)malloc(sizeof(int)*n);
     (*returnColumnSizes)[i] = n;
 }
 //定义起始位置
    int startX = 0;
    int startY = 0;
//定义循环圈数
    int loop = n / 2;
//针对奇数
    int mid = n / 2;
//定义每一圈的偏移量
    int  offest = 1;
    //要填入的数
   int count = 1;

    while(loop){
        int i = startX;
        int j = startY;  //起始位置跟着变
        //上侧从左往右
        for(;j <  n - offest;j++)
            ans[startX][j] = count++;
        //右侧从上往下
        for(;i<  n - offest;i++)
            ans[i][j] = count++;
        //下侧从右往左
        for(;j > startY;j--)
            ans[i][j] = count++;
        //左侧从下往上
        for(;i > startX;i--)
            ans[i][j] = count++;
        offest += 1;
        loop--;
        startX++;
        startY++;    
    }
    if(n % 2)
        ans[mid][mid] = count;

    return ans;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值