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

牛牛的顺时针遍历

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;
    }
};

全部评论

相关推荐

下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务