給定二維陣列,然後按照對角線折返遍歷。
通過大量的ifelse對情況進行分類,最無腦的做法:
class solution
;int col = matrix[0]
.size()
; vector<
int> diagonal;
if(row ==1)
return diagonal;}if
(col ==1)
return diagonal;
}int i =
0, j =0;
int upordown =0;
diagonal.
push_back
(matrix[0]
[0])
;while
(i < row -
1|| j < col -1)
else
}else
if(j == col -1)
else
}else
if(i !=
0&& j ==
0&& i != row -1)
else
}else
if(i == row -
1&& j != col -1)
else
}else
else
} diagonal.
push_back
(matrix[i]
[j]);}
return diagonal;}}
;
1.每一趟對角線中元素的座標(x, y)相加的和是遞增的。
2.每一趟都是 x 或 y 其中乙個從大到小(每次-1),另乙個從小到大(每次+1)。
3.確定初始值。例如這一趟是 x 從大到小, x 盡量取最大,當初始值超過 x 的上限時,不足的部分加到 y 上面。
4.確定結束值。例如這一趟是 x 從大到小,這一趟結束的判斷是, x 減到 0 或者 y 加到上限。
5.這一趟是 x 從大到小,那麼下一趟是 y 從大到小,迴圈進行。 並且方向相反時,邏輯處理是一樣的,除了x,y和他們各自的上限值是相反的。
class solution
;int col = matrix[0]
.size()
; vector<
int> diagonal;
bool upordown = true;
for(
int i =
0; i < row + col; i++
) upordown =
!upordown;
}return diagonal;}}
;
自己的**:
class solution
;int col = matrix[0]
.size()
;if(col ==0)
return
; vector<
int> diagonal;
bool upordown = true;
//true=up
for(
int i =
0; i < row + col -
1; i++
) i++
; y =
(i >
(col-1)
)? col-
1: i;
x = i - y;
//while (y >= 0 && x <= row - 1)
//i++;
}return diagonal;}}
;
對角線遍歷
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。1 索引和為偶數 元素在第一行,往右走 元素在最後一列,往下走 其他情況,往右上走 2 索引和為奇數 元素在第一列,往下走 元素在最後一行,往右走 其他情況,往左下走 clas...
leetcode 對角線遍歷(js實現)
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,4,7,5,3,6,8,9 解釋 兩種移動方向 處理上下左右編輯問題 越界即轉彎 param matrix ret...
golang 對角線遍歷
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1 確定總劃線次數,m n 1 記錄每道線起點座標 根據起始點座標推算出該線上的所有元素 根據奇偶性決定線元素是否需要翻轉...