leetcode腾讯精选50-054

LeetCode螺旋矩阵问题代码实现
博客给出LeetCode上螺旋矩阵问题的链接https://leetcode-cn.com/problems/spiral-matrix/ ,并展示了C++代码实现。代码定义了一个Solution类,包含解决螺旋矩阵问题的函数,使用了标志数组、方向数组等。

题目:
https://leetcode-cn.com/problems/spiral-matrix/
代码:class Solution {
public:
vector spiralOrder(vector<vector>& matrix) {
int m = matrix.size();
if(m==0)
return {};
int n = matrix[0].size();
int cnt = 0, nums = m*n;
int vis[m][n]; // 标志数组
memset(vis,0,sizeof(vis));
int dx[4] = {-1,0,1,0}; // X方向数组
int dy[4] = {0,1,0,-1}; // Y方向数组
int dir = 1 , x = 0, y =0;
vector res;

    while(cnt < nums){
        res.push_back(matrix[x][y]);
        cnt++;
        vis[x][y] = 1; // vis[x][y]==1 代表已经访问过该点
        /* 如果当前方向走到尽头(超出数组范围或者下一个点已经访问过),改变方向 */
        if(dir==2 && (x+dx[dir]>=m || vis[x+dx[dir]][y]))
            dir = 3;
        if(dir==0 && (x+dx[dir]<0 || vis[x+dx[dir]][y]))
            dir = 1;
        if(dir==1 && (y+dy[dir]>=n || vis[x][y+dy[dir]]))
            dir = 2;
        if(dir==3 && (y+dy[dir]<0 || vis[x][y+dy[dir]]))
            dir = 0;
        /* 计算下一个点的坐标 */
        x += dx[dir]; 
        y += dy[dir];
   }
   return res;
}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值