本文主要是介绍Diagonal Traverse,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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:
思路:用一个变量表示向上或者向下,然后向上的时候,row --, col++,特殊情况是最后一个元素,分两种一种是到达最后一行 col++,一种是到达了最后一列, row++
同理向下的时候收集,row++, col--, 特殊情况,最后一个元素,到达第一列row ++和最后一行col++; 注意收集的时候,普通的收集,用while循环完成,最后一个,特殊处理;
class Solution {public int[] findDiagonalOrder(int[][] mat) {int m = mat.length;int n = mat[0].length;boolean up = true;int row = 0; int col = 0;int[] res = new int[m * n];int i = 0;while(row < m && col < n) {if(up) {// 普通的收集;while(row > 0 && col < n - 1) {res[i++] = mat[row][col];row--;col++;}// reach the last item;res[i++] = mat[row][col];// 分两种情况讨论;if(col == n - 1) {row++;} else {col++;}} else {// go down;// 普通的收集;while(row < m - 1 && col > 0) {res[i++] = mat[row][col];row++;col--;}// reach the last item;res[i++] = mat[row][col];// 分两种情况讨论;if(row == m - 1) {col++;} else {row++;}}up = !up;}return res;}
}
这篇关于Diagonal Traverse的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!