@@ -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- */
6454public static class Solutoin2 {
6555public 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