Spiral Matrix II

来源:互联网 发布:访客网络要开启吗 编辑:程序博客网 时间:2024/05/29 10:34

      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;} 


0 0
原创粉丝点击