LeetCode 54. Spiral Matrix && 59. Spiral Matrix II

题解

螺旋遍历矩阵大总结,给出一个优雅清晰的解法。
大概思路是模拟移动方向,计算xy位置。
比如n*m的矩阵,按右下左上的顺序,依次移动的步数是
{ m, n-1 , m-1 , n-2, …, 0 } 直到遇到第一个0。
其中左右的步数 { m, m-1 , m-2 … }
上下的步数 { n-1, n-2, n-3, … }
所以可以用个 step[2] = {m,n-1} 来记录剩余步数
每走完一行列就-1,直到遇到0。

看代码吧,思路清楚。


Code

class Solution {
public:
    int dx[4]={0,1,0,-1};
    int dy[4]={1,0,-1,0};
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.empty()) return res;
        int n=matrix.size(),m=matrix[0].size();
        if(n==0||m==0) return res;
        
        int step[2]={m,n-1};// steps need to move
        
        int D=0;// direction
        int nx,ny;
        nx=0,ny=-1;
        while(step[D%2]!=0){
            for(int i=0;i<step[D%2];i++){
                nx+=dx[D];
                ny+=dy[D];
                res.push_back(matrix[nx][ny]);
            }
            step[D%2]--;
            D=(D+1)%4;
        }
        return res;
    }
};
vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n));
        
        int step[2]={n,n-1};
        int D=0;
        int nx,ny,k=1;
        nx=0,ny=-1;
        while(step[D%2]!=0){
            for(int i=0;i<step[D%2];i++){
                nx+=dx[D];
                ny+=dy[D];
                res[nx][ny]=k++;
            }
            step[D%2]--;
            D=(D+1)%4;
        }
        return res;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值