前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >思维游戏54螺旋遍历

思维游戏54螺旋遍历

作者头像
mingjie
发布2023-02-28 16:01:05
1640
发布2023-02-28 16:01:05
举报
文章被收录于专栏:Postgresql源码分析

思考:螺旋遍历可以直接模拟

需要注意 1、四个方向每个方向走几步,步数逐次减一。 2、每个方向走完后,需要调整到新起点。 3、用位置不太好作为终止条件,用计数做终止条件,每次走完可能终止。

输入:[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

代码语言:javascript
复制
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        int nrow;
        int ncol;
        int n;

        nrow = matrix.size();
        if (nrow == 0) return res;
        ncol = matrix[0].size();
        n = nrow * ncol;

        int x = 0, y = 0;
        while(n != 0) {
            // >
            for (int i = 0; i < ncol; i++) {
                printf("(>)%d ", matrix[x][y]);
                res.push_back(matrix[x][y++]);
                n--;
            }
            if (n == 0) break;
            x += 1;
            y--;
            nrow -= 1;
            printf("\nnew [%d,%d] row:%d n:%d\n",x, y, nrow, n);
            // v
            for (int i = 0; i < nrow; i++) {
                printf("(v)%d ", matrix[x][y]);
                res.push_back(matrix[x++][y]);
                n--;
            }
            if (n == 0) break;
            x--;
            y -= 1;
            ncol -= 1;
            printf("\nnew [%d,%d] col:%d n:%d\n",x, y, ncol, n);
            // <
            for (int i = 0; i < ncol; i++) {
                printf("(<)%d ", matrix[x][y]);
                res.push_back(matrix[x][y--]);
                n--;
            }
            if (n == 0) break;
            x -= 1;
            y++;
            nrow -=1;
            printf("\nnew [%d,%d] row:%d n:%d\n",x, y, nrow, n);
            // ^
            for (int i = 0; i < nrow; i++) {
                printf("(^)%d ", matrix[x][y]);
                res.push_back(matrix[x--][y]);
                n--;
            }
            if (n == 0) break;
            x++;
            y += 1;
            ncol -= 1;
            printf("\nnew [%d,%d] col:%d n:%d\n",x, y, ncol, n);
        }
        return res;  
    }

输出:

代码语言:javascript
复制
(>)1 (>)2 (>)3 (>)4 
new [1,3] row:2 n:8

(v)8 (v)12 
new [2,2] col:3 n:6

(<)11 (<)10 (<)9 
new [1,0] row:1 n:3

(^)5 
new [1,1] col:2 n:2

(>)6 (>)7 
new [2,2] row:0 n:0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档