题解 | #牛牛的顺时针遍历#

牛牛的顺时针遍历

https://www.nowcoder.com/practice/4c6722d907b147c7b73b51bdac768374

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型vector<vector<>> 
     * @return int整型vector
     */
    vector<int> spiralOrder(vector<vector<int> >& matrix) {
        // write code here
        int m = matrix.size(), n = matrix[0].size();
        //先设定右下左上的顺时针方向
        vector<vector<int>> d{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        //记录走过的元素
        vector<bool> vis(m * n, false);
        // x, y初始化坐标原点,cnt:元素个数总和, f:当前遍历的方向
        int x = 0, y = 0, cnt = 0, f = 0;
        //元素总数
        int all = m * n;
        vector<int> ans;
        while(cnt++ < all){
            ans.push_back(matrix[x][y]);
            vis[x * n + y] = true;
            int nx = x + d[f][0], ny = y + d[f][1];
            //如果下个元素不在矩阵中,或者已经遍历过,则变换方向
            if(nx < 0 || nx >= m || ny < 0 || ny >= n || vis[nx * n + ny]){
                f = (f + 1) % 4;
                nx = x + d[f][0];
                ny = y + d[f][1];
            }
            x = nx;
            y = ny;
        }
        return ans;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务