@@ -39,15 +39,16 @@ array in a diagonal order_.
3939
4040## 解题思路
4141
42- - 给出一个二维数组,要求按照如图的方式遍历整个数组。
43- - 这一题用模拟的方式就可以解出来。需要注意的是边界条件:比如二维数组为空,二维数组退化为一行或者一列,退化为一个元素。具体例子见测试用例。
44- - 解题关键是在判断下一个位置,将矩阵想像成一个 X,Y 坐标轴。那么可分为以下几种情况,
45- 1、斜角向右上遍历时,
46- 当右上角在坐标轴内, 正常计算 即, x+1(X 轴向右移动), y-1(Y 轴向上移动)
47- 当右上角在坐标轴外,那么当前位置只能在 第一行 X 坐标轴 ,或者 最后一列 Y 坐标轴,即判断该两种情况下,应该 X 坐标往右,或者 Y 坐标往上
48- 2、同理 斜角向下遍历时
49- 当左下角在坐标轴内,正常计算 即, x-1(X 轴向右移动), y+1(Y 轴向下移动)
50- 当左下角在坐标轴外,那么当前位置只能在 第一列 Y 坐标轴,或者 最后一行 X 坐标轴,即判断该两种情况下,应该 X 坐标往左,或者 Y 坐标往下
42+ 这一题用模拟的方式就可以解出来。需要注意的是边界条件:比如二维数组为空,二维数组退化为一行或者一列,退化为一个元素。具体例子见测试用例。
43+
44+ 解题关键是在判断下一个位置,将矩阵想像成一个 ` X ` ,` Y ` 坐标轴。那么可分为以下几种情况,
45+
46+ 1 . 斜角向右上遍历时,
47+ - 当右上角在坐标轴内, 正常计算 即, ` x+1 ` (` X ` 轴向右移动),` y-1 ` (` Y ` 轴向上移动)
48+ - 当右上角在坐标轴外,那么当前位置只能在 第一行 ` X ` 坐标轴 ,或者 最后一列 ` Y ` 坐标轴,即判断该两种情况下,应该 ` X ` 坐标往右,或者 ` Y ` 坐标往上
49+ 2 . 同理 斜角向下遍历时
50+ - 当左下角在坐标轴内,正常计算 即, ` x-1 ` (` X ` 轴向右移动), ` y+1 ` (` Y ` 轴向下移动)
51+ - 当左下角在坐标轴外,那么当前位置只能在 第一列 ` Y ` 坐标轴,或者 最后一行 ` X ` 坐标轴,即判断该两种情况下,应该 ` X ` 坐标往左,或者 ` Y ` 坐标往下
5152
5253## 代码
5354
@@ -57,44 +58,44 @@ array in a diagonal order_.
5758 * @return {number[]}
5859 */
5960var findDiagonalOrder = function (mat ) {
60- const rowLen = mat .length ;
61- const colLen = mat[0 ].length ;
62- const total = rowLen * colLen;
63- const result = [];
64- let k = 0 ;
65- let row = 0 ;
66- let col = 0 ;
67- let direction = " up " ;
68-
69- while (k < total) {
70- result .push (mat[row][col]);
71-
72- if (direction === " up " ) {
73- if (row === 0 && col < colLen - 1 ) {
74- col++ ;
75- direction = " down" ;
76- } else if (col === colLen - 1 ) {
77- row++ ;
78- direction = " down" ;
79- } else {
80- row-- ;
81- col++ ;
82- }
83- } else {
84- if (col === 0 && row < rowLen - 1 ) {
85- row++ ;
86- direction = " up " ;
87- } else if (row === rowLen - 1 ) {
88- col++ ;
89- direction = " up " ;
90- } else {
91- row++ ;
92- col-- ;
93- }
94- }
95- k++ ;
96- }
97- return result;
61+ const rowLen = mat .length ;
62+ const colLen = mat[0 ].length ;
63+ const total = rowLen * colLen;
64+ const result = [];
65+ let k = 0 ;
66+ let row = 0 ;
67+ let col = 0 ;
68+ let direction = ' up ' ;
69+
70+ while (k < total) {
71+ result .push (mat[row][col]);
72+
73+ if (direction === ' up ' ) {
74+ if (row === 0 && col < colLen - 1 ) {
75+ col++ ;
76+ direction = ' down' ;
77+ } else if (col === colLen - 1 ) {
78+ row++ ;
79+ direction = ' down' ;
80+ } else {
81+ row-- ;
82+ col++ ;
83+ }
84+ } else {
85+ if (col === 0 && row < rowLen - 1 ) {
86+ row++ ;
87+ direction = ' up ' ;
88+ } else if (row === rowLen - 1 ) {
89+ col++ ;
90+ direction = ' up ' ;
91+ } else {
92+ row++ ;
93+ col-- ;
94+ }
95+ }
96+ k++ ;
97+ }
98+ return result;
9899};
99100```
100101
0 commit comments