标签:&& Traverse 遍历 matrix Diagonal result 数组 矩形 String
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; } };
标签:&&,Traverse,遍历,matrix,Diagonal,result,数组,矩形,String 来源: https://www.cnblogs.com/hu-19941213/p/10932361.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。