[LeetCode]对角线遍历

版权声明:本文为本人原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37316917/article/details/86939973

题目

 

代码

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
        //判断是否为空
        if(matrix.empty()) return {};
        
        
        int height=matrix.size()-1;
        int width=matrix[0].size()-1;
        
        vector<int> res;
        //当前是否向上遍历
        bool isUp=true;
        for(int i=0,j=0;i<=height&&j<=width;)
        {
            res.push_back(matrix[i][j]);
            //到最上面了
            if((i==0||j==width)&&isUp)
            {
                if(j==width)
                    i++;
                else
                    j++;
                isUp=false;
                continue;
            }
            //到底了
            if((i==height||j==0)&&!isUp)
            {
                if(i==height)
                    j++;
                else
                    i++;
                isUp=true;
                continue;
            }
            //正常进行
            if(isUp)
            {
                i--;
                j++;
            }else
            {
                i++;
                j--;
            }
        }
        
        return res;
    }
};

 思路

重点就是遍历过程中的边界条件,比如向上遍历的时候结束条件就是到了最上边或者最右边,向下遍历的时候边界条件就是到了最左边或者最右边。 

猜你喜欢

转载自blog.csdn.net/m0_37316917/article/details/86939973