@@ -51,50 +51,40 @@ public int[] findDiagonalOrder(int[][] matrix) {
5151 }
5252 }
5353
54- /*
55- matrix = new int[][]{
56- {1, 2, 3},
57- {4, 5, 6},
58- {7, 8, 9},
59- {10, 11, 12},
60- {13, 14, 15},
61- };
62- expected = new int[]{1, 2, 4, 7, 5, 3, 6, 8, 10, 13, 11, 9, 12, 14, 15};
63- */
6454 public static class Solutoin2 {
6555 public int [] findDiagonalOrder (int [][] matrix ) {
66- if (matrix == null || matrix .length == 0 ){
67- return new int [0 ];
56+ if (matrix == null || matrix .length == 0 ) {
57+ return new int [0 ];
58+ }
59+ List <List <Integer >> diagonals = new ArrayList <>();
60+ int maxRow = matrix .length ;
61+ int maxCol = matrix [0 ].length ;
62+ int maxDiagonal = maxRow + maxCol - 1 ;
63+ for (int diagonalIndex = 0 ; diagonalIndex < maxDiagonal ; diagonalIndex ++) {
64+ int curRowIdx = (diagonalIndex < maxCol ) ? 0 : (diagonalIndex - maxCol + 1 );
65+ int curColIdx = (diagonalIndex < maxCol ) ? diagonalIndex : (maxCol - 1 );
66+ List <Integer > diagonal = new ArrayList <>();
67+ while (curRowIdx >= 0 && curRowIdx < maxRow && curColIdx >= 0 && curColIdx < maxCol ) {
68+ int diagonalElement = matrix [curRowIdx ][curColIdx ];
69+ diagonal .add (diagonalElement );
70+ curRowIdx ++;
71+ curColIdx --;
72+ }
73+ diagonals .add (diagonal );
74+ }
75+ int [] result = new int [maxRow * maxCol ];
76+ int resultIdx = 0 ;
77+ for (int i = 0 ; i < diagonals .size (); i ++) {
78+ List <Integer > diagonal = diagonals .get (i );
79+ if (i % 2 == 0 ) {
80+ Collections .reverse (diagonal );
81+ }
82+ for (int j = 0 ; j < diagonal .size (); j ++) {
83+ result [resultIdx ] = diagonal .get (j );
84+ resultIdx ++;
6885 }
69- List <List <Integer >> diagonals = new ArrayList <>();
70- int maxRow = matrix .length ;
71- int maxCol = matrix [0 ].length ;
72- int maxDiagonal = maxRow + maxCol - 1 ;
73- for (int diagonalIndex = 0 ; diagonalIndex < maxDiagonal ; diagonalIndex ++) {
74- int curRowIdx = (diagonalIndex < maxCol ) ? 0 : (diagonalIndex - maxCol + 1 );
75- int curColIdx = (diagonalIndex < maxCol ) ? diagonalIndex : (maxCol - 1 );
76- List <Integer > diagonal = new ArrayList <Integer >();
77- while (curRowIdx >= 0 && curRowIdx < maxRow && curColIdx >= 0 && curColIdx < maxCol ) {
78- int diagonalElement = matrix [curRowIdx ][curColIdx ];
79- diagonal .add (diagonalElement );
80- curRowIdx ++;
81- curColIdx --;
82- }
83- diagonals .add (diagonal );
84- }
85- int [] result = new int [maxRow * maxCol ];
86- int resultIdx = 0 ;
87- for (int i = 0 ; i < diagonals .size (); i ++) {
88- List <Integer > diagonal = diagonals .get (i );
89- if (i % 2 == 0 ) {
90- Collections .reverse (diagonal );
91- }
92- for (int j = 0 ; j < diagonal .size (); j ++) {
93- result [resultIdx ] = diagonal .get (j );
94- resultIdx ++;
95- }
96- }
97- return result ;
86+ }
87+ return result ;
9888 }
9989 }
10090
0 commit comments