Spiral Matrix II

本文介绍了一个生成螺旋矩阵的算法,该算法能够根据给定的整数n生成一个n×n的螺旋矩阵,矩阵元素从1到n^2按螺旋顺序填充。文章详细解释了算法的实现思路,并提供了一段C语言的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      Given an integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order.

      For example,
Given n = 3,

You should return the followingmatrix:

[

 [ 1, 2, 3 ],

 [ 8, 9, 4 ],

 [ 7, 6, 5 ]

]

 

       思路:本题的关键在于,在以螺旋顺序迭代二维数组的时候,如何求出每次迭代的二维数组索引。螺旋顺序为上、右、下、左。本题的解法是,以k代表二维数组的层数,比如以一个4*4的二维数组为例:

1, 2, 3, 4

5, 6, 7, 8

9, 10,11,12

13,14,15,16

       第0层的螺旋顺序为:1,2,3,4,8,12,16,15,14,13,9,5。

       第1层的螺旋顺序为:6,7,11,10.

 

代码如下:

int** generateMatrix(intn)
{
    int i, j, k;
    int index;
   
    int **res = calloc(n,sizeof(int *));
    int reslen = n * n;
   
    for(i = 0; i <n; i++)
    {
        res[i] = calloc(n,sizeof(int));
    }
 
    index = 1;
    i = j = k = 0;
    while(index <= reslen)
    {
        res[i][j] =index++;
        if(index > reslen)  break;
       
        if(i == k)
        {
            j++;
            if(j < n-k)continue;
            j--;
        }
        if(j == n-k-1)
        {
            i++;
            if(i < n-k)continue;
            i--;
        }
        if(i == n-k-1)
        {
            j--;
            if(j >= k)  continue;
            j++;
        }
        if(j == k)
        {
            i--;
            if(i == k)
            {
                i = j = ++k;
            }
        }
    }
    return res;
} 


转载于:https://www.cnblogs.com/gqtcgq/p/7247133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值