Leetcode 54. Spiral Matrix

2017-06-11  本文已影响0人  persistent100

题目

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].

分析

给定一个m*n的矩阵,按照螺旋方向,返回所有的元素,这个比较简单,只需要对行列进行控制,按照螺旋旋转的方向,依次递增或递减行列索引即可。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) {
    int * ans=(int *)malloc(sizeof(int)*matrixRowSize*matrixColSize);
    int circle=0;//第几圈
    int p=1;//螺旋旋转方向1->2->3->4->1
    int m=0,n=0;//当前旋转到的位置
    int num=0;
    while(num<matrixRowSize*matrixColSize)
    {
        //printf("%d ",matrix[m][n]);
        if(p==1)
        {
            if(n<matrixColSize-circle-1)
            {
                ans[num]=matrix[m][n];
                n++;
                num++;
            }
            else
                p=2;
        }
        else if(p==2)
        {
            if(m<matrixRowSize-circle-1)
            {
                ans[num]=matrix[m][n];
                m++;
                num++;
            }
            else
                p=3;
        }
        else if(p==3)
        {
            if(n>circle)
            {
                ans[num]=matrix[m][n];
                n--;
                num++;
            }
            else if(n==circle)
            {
                ans[num]=matrix[m][n];
                m--;
                p=4;
                num++;
            }
        }
        else
        {
            if(m>circle+1)
            {
                ans[num]=matrix[m][n];
                m--;
                num++;
            }
            else if(m==circle+1)
            {
                ans[num]=matrix[m][n];
                n++;
                num++;
                p=1;
                circle++;
            }
        }
    }
    return ans;
}
上一篇下一篇

猜你喜欢

热点阅读