码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】4.Array and String — Diagonal Traverse 对角线遍历

时间:2019-05-27 19:21:03      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:put   back   matrix   tput   not   http   set   leetcode   https   

Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.

Example:

Input:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
Output:  [1,2,4,7,5,3,6,8,9]
Explanation:

          技术图片

Note:

The total number of elements of the given matrix will not exceed 10,000.

这一题我写了一下午(看在自己刚入门和智商的份上,原谅自己)

本来打算放弃了,后来强行在纸上画图,找规律,写逻辑,最终把代码编了出来,努力和坚持还是有回报的 O(∩_∩)O哈哈~

总体思路:把二维数组看成一个矩形,对应的四条边列出相应的四条判断规则,当遍历的元素“碰”(想象一下为一个会动的点在一个矩形中移动)到矩形的边时,根据规则改变方向。

从数组第一个元素开始,最后一个元素为结束。具体解释放在代码的注释里,就不多说了,脑子快炸了。。。

class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
    if (matrix.size()==0) return{}; //判断数组是否为空
    vector<int> result; //存放结果的数组
    int M = matrix.size();//获取数组的行数 
    int N = matrix[0].size();//获取数组的列数
    int  m=0, n = 0;        //两个计数器,分别对应M、N
    result.push_back(matrix[m][n]);  //将matrix[0][0]加入到数组中.
    while (!(m==M-1 && n==N-1)) { //当遍历到最后一个元素matrix[M][N]时,循环结束.
            if (m == 0 && n < N-1) {  //请把二维数组脑补成一个矩形,这里判断的是矩形的上边规则,即当元素遍历到矩形的上边.
                result.push_back(matrix[m][++n]);
                while (n >0&&m<M-1)/右移一位,然后向左下方遍历.
                {
                    m++; n--;
                    result.push_back(matrix[m][n]);
                }
            }
            else if (n == 0 && m < M-1) //矩形的左边.即当元素遍历到矩形的最左边.
            {
                result.push_back(matrix[++m][n]);
                while (m >0&&n<N-1) //下移一位,然后向右上方遍历.
                {
                    m--; n++;
                    result.push_back(matrix[m][n]);
                }
            }
            else if ( n == N - 1 && m != M - 1) //矩形的右边.即当元素即将遍历到最右边.
            {
                result.push_back(matrix[++m][n]);
                while (m < M - 1&&n>0) //下移一位,然后向左下方遍历.
                {
                    m++; n--;
                    result.push_back(matrix[m][n]);
                }
            }
            else if ( m == M - 1 && n != N-1)//矩形的下边.即当元素遍历到最下边.
            {
                result.push_back(matrix[m][++n]);
                while (n <N-1&&m>0) //右移一位,然后向右上方遍历.
                {
                    m--; n++;
                    result.push_back(matrix[m][n]);
                }
            }
    }
    return result;
 }
};

 

【LeetCode】4.Array and String — Diagonal Traverse 对角线遍历

标签:put   back   matrix   tput   not   http   set   leetcode   https   

原文地址:https://www.cnblogs.com/hu-19941213/p/10932361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!