[C语言][LeetCode][59]Spiral Matrix II

题目

Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

标签

Array

难度

中等

分析

题目意思是给定一个整形n,创建一个旋转的矩阵,由1-n²的数字填充。

解题思路是,按照以下顺序遍历数组,直到循环结束
1. 从colBegin到colEnd遍历,rowBegin++
2. 从rowBegin到rowEnd遍历,colEnd–
3. 从colEnd到colBegin遍历,rowEnd–
4. 从rowEnd到rowBegin遍历,colBegin++

C代码实现

int** generateMatrix(int n) {
    int i=0, num=1;
    int rowBegin=0, rowEnd= n-1;
    int colBegin=0, colEnd=n-1;

    int **matrix= (int **)malloc(n*sizeof(int *));
    for(i=0;i<n;i++)
    {
        matrix[i]=(int *)malloc(n*sizeof(int));
        memset(matrix[i], 0, sizeof(int)*n);
    }

    while(rowBegin<=rowEnd && colBegin<=colEnd)
    {
        for(i=colBegin; i<=colEnd; i++)
        {
            matrix[rowBegin][i] = num++;
            //printf("111 matrix[%d][%d] : %d\n", rowBegin, i, matrix[rowBegin][i]);
        }
        rowBegin++;

        for(i=rowBegin; i<=rowEnd; i++)
        {
            matrix[i][colEnd] = num++;
            //printf("222 matrix[%d][%d] : %d\n", i, colEnd, matrix[i][colEnd]);
        }
        colEnd--;

        if(rowBegin<=rowEnd)
        {
            for(i=colEnd; i>=colBegin; i--)
            {
                matrix[rowEnd][i] = num++;
                //printf("333 matrix[%d][%d] : %d\n", rowEnd, i, matrix[rowEnd][i]);
            }
        }
        rowEnd--;

        if(colBegin<=colEnd)
        {
            for(i=rowEnd; i>=rowBegin; i--)
            {
                matrix[i][colBegin] = num++;
                //printf("444 matrix[%d][%d] : %d\n", i, colBegin, matrix[i][colBegin]);
            }
        }
        colBegin++;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值