zoukankan      html  css  js  c++  java
  • LeetCode498 对角线遍历

    给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

     

    示例:

    输入:
    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    
    输出:  [1,2,4,7,5,3,6,8,9]
    
    解释:
    

     

    说明:

    1. 给定矩阵中的元素总数不会超过 100000 。

    //章节 - 数组和字符串    
    //二、二维数组简介
    //1.对角线遍历
    /*
    算法思想:
        有类题属于直观上很好理解,但是写起来却不知如何下手。这题就属于此类。
        这道题好处是给了一个图例,而图例又不像另一种4向(右,左下,下,右上)画法让人误导,而是对角线,方向是右上、左下依次交替。因此,只需确定每条对角线的起点,由起点向右上延伸直到边界,再根据当前所在的行数判断是否需要逆序即可。每行的起始点如下:从[0,0]向下延伸到[m-1,0],再向右延伸到[m-1][n-1]
    
    */
    //算法实现:
    class Solution {
    public:
        vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
            vector<int> result;
            int m = matrix.size();
            if(m == 0) 
                return result;
            int n = matrix[0].size();
            if(n == 0) 
                return result;
            for(int i = 0, j = 0; i+j < m+n-1; ) {  // 起点位置(0,0)->(m-1,0)->(m-1,n-1),然后每个起点右上延伸直到边界,每隔一行翻转一下
                vector<int> tmp;
                bool bflag = (i+j) & 0x01;
                if(i < m) {
                    for(int x = i, y = 0; x>=0 && y<n; x--,y++) {
                        tmp.push_back(matrix[x][y]);
                    }
                    i++;
                }
                else if(i >= m) {
                    for(int x = i-1, y = j+1; x>=0 && y<n; x--,y++) {
                        tmp.push_back(matrix[x][y]);
                    }
                    j++;
                }
                if(bflag) { // bflag需要判断i+j,但是由于上面i和j已经累加了,所以要用bflag判断
                    reverse(tmp.begin(), tmp.end());
                }
                result.insert(result.end(), tmp.begin(), tmp.end());
            }
            return result;
        }
    };
  • 相关阅读:
    转载Crazybingo的文章: 第三章 创造平台——Quartus II 11.0 套件安装指南
    Can't launch the ModelSim-Altera software
    一种简单的ADV7842调试视频pixel_cnt/line的办法.
    调试ADV7842的点滴 之 hdmi
    沿检测使能,时钟同步化
    global clock network
    捡到篮子里边的都是菜
    (转)时序分析基本公式
    Spring中的AOP(一)
    AOP的概念
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061321.html
Copyright © 2011-2022 走看看