[C语言][LeetCode][54]Spiral Matrix

题目

Spiral Matrix
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].

标签

Array

难度

中等

分析

题目意思是给定m*n维的数组,按顺时针遍历数组,输出如上。

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

C代码实现

int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) 
{
    int * ret = (int *)malloc(matrixRowSize*matrixColSize*sizeof(int));
    int k=0;

    int rowBegin=0, rowEnd=matrixRowSize-1;
    int colBegin=0, colEnd=matrixColSize-1;
    int i=0;    

    while((rowBegin<=rowEnd) && (colBegin<=colEnd))
    {
        for(i=colBegin; i<=colEnd; i++)
            ret[k++] = matrix[rowBegin][i];
        rowBegin++;

        for(i=rowBegin; i<=rowEnd; i++)
            ret[k++] = matrix[i][colEnd];
        colEnd--;

        if(rowBegin<=rowEnd)
        {
            for(i=colEnd; i>=colBegin; i--)
                ret[k++] = matrix[rowEnd][i];
        }
        rowEnd--;

        if(colBegin<=colEnd)
        {
            for(i=rowEnd; i>=rowBegin; i--)        
                ret[k++] = matrix[i][colBegin];
        }
        colBegin++;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值