• 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;
        }
    };
  • 相关阅读:
    聚类算法学习-kmeans,kmedoids,GMM
    hdu
    高仿精仿微信应用ios源码下载
    UVA 116 Unidirectional TSP 经典dp题
    [置顶] 动态规划之切割钢条
    poj
    求解printf函数?
    实现多文件上传在iOS开发中
    开源DirectShow分析器和解码器: LAV Filter
    <Win32_20>纯c语言版的打飞机游戏出炉了^_^
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061321.html
Copyright © 2020-2023  润新知