@@ -51,50 +51,40 @@ public int[] findDiagonalOrder(int[][] matrix) {
51
51
}
52
52
}
53
53
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
- */
64
54
public static class Solutoin2 {
65
55
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 ++;
68
85
}
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 ;
98
88
}
99
89
}
100
90
0 commit comments