从零开始的LeetCode刷题日记:54. 螺旋矩阵

文章介绍了如何用C++编写一个名为SpiralOrder的函数,解决给定不等行列的螺旋矩阵元素顺序遍历问题,通过四层嵌套循环和条件判断处理特殊情况。
摘要由CSDN通过智能技术生成

一.相关链接

题目链接54. 螺旋矩阵

二.心得体会

       这道题与59类似,不同的一点是矩阵的行和列不一定相等,所以循环体大致不变,只需要在最后处理好中间剩下的那一行或者列的元素即可。

三.代码

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
    int m = matrix.size();
    int n = matrix[0].size();
    int offset = 1;
    int startm = 0;
    int startn = 0;
    //循环的圈数由小的那个维度来决定
    int loop = m < n ? m/2 : n/2;
    int loop_sub = loop;
    vector<int> ans;
    for(;loop>0;loop--){
        startm = offset - 1;
        startn = offset - 1;
        for(int i=startn;i<n-offset;i++){
            ans.push_back(matrix[startm][i]);
        }
        startn = n - offset;
        for(int j=startm;j<m-offset;j++){
            ans.push_back(matrix[j][startn]);
        }
        startm = m - offset;
        for(int i=startn;i>=offset;i--){
            ans.push_back(matrix[startm][i]);
        }
        startn = offset - 1;
        for(int j=startm;j>=offset;j--){
            ans.push_back(matrix[j][startn]);
        } 
        offset++;
    }
    //哪个维度小,最终留下的元素就在哪个维度的中间取得,只需要忽略那一行(或者列)循环中已经遍历过的元素即可
    if(ans.size()<m*n){
        int select = m < n ? m : n;
        if(select==m)
        for(int i=loop_sub;i<n-loop_sub;i++)
        ans.push_back(matrix[m/2][i]);
        else if(select==n)
        for(int i=loop_sub;i<m-loop_sub;i++)
        ans.push_back(matrix[i][n/2]);
    }
    return ans;
    }
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值