LeetCode/对角线遍历

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素

1. 模拟操作

按照对角线扫描的顺序,首先要清楚得遍历m+n-1趟
对于对角线移动操作,往上扫描时横坐标增,纵坐标减,往下扫描时,横坐标减,纵坐标增
每扫描完一趟,横纵坐标有一个变化
向上扫描结束时,如果不为右边界,则纵坐标不变,横坐标加1,否则横坐标不变,纵坐标加1
向下扫描结束时,如果不为下边界,则横坐标不变,纵坐标加1,否则纵坐标不变,横坐标加1
在边界的时候,坐标初始值可以根据趟数计算得到

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
        int m = mat.size();
        int n = mat[0].size();
        vector<int> res;
        for (int i = 0; i < m + n - 1; i++) {
            if (i % 2) {//从上往下
                int x = i < n ? 0 : i - n + 1;//不为右边界,纵坐标为0,否则通过趟数运算
                int y = i - x;
                while (x < m && y >= 0) {
                    res.emplace_back(mat[x][y]);
                    x++;
                    y--;
                }
            } else {//从下往上
                int x = i < m ? i : m - 1;//不为下边界,纵坐标为趟数,否则为m-1
                int y = i - x;
                while (x >= 0 && y < n) {
                    res.emplace_back(mat[x][y]);
                    x--;
                    y++;
                }
            }
        }
        return res;
    }
};
posted @   失控D大白兔  阅读(27)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示