思路:把矩陣螺旋輸出。
做法也很簡單,我們只需要每次輸出一圈後更新橫排的左右邊界和豎排的上下邊界即可,但是要保證左邊界小於等於右邊界,上邊界小於等於下邊界:
public list
spiralorder
(int
matrix)
u++;for
(int i=u;i<=d;i++
) r--
;for
(int i=r;i>=l;i--
) d--
;for
(int i=d;i>=u;i--
) l++;}
return res;
}
這樣寫看似沒有問題了,實際上還是不對,因為上面兩個迴圈結束後存在u++和r–,這導致u<=d和l<=r此時可能已經無法滿足了,如果此時無法滿足,最後兩個迴圈應該無需執行(執行就錯了重複了!!),所以最後兩個迴圈裡應該加上u<=d和l<=r兩個判斷條件!!!
public list
spiralorder
(int
matrix)
u++;for
(int i=u;i<=d;i++
) r--
;for
(int i=r;i>=l&&u<=d;i--
) d--
;for
(int i=d;i>=u&&l<=r;i--
) l++;}
return res;
}
思路:
同樣也是矩陣的遍歷,但是這裡需要利用乙個規律,圖中的各個箭頭的橫縱座標之和是相等的!利用這一點就可以以和的奇偶區箭頭的方向啦:
public
int[
]finddiagonalorder
(int
matrix);}
int r =
0, c =0;
int row = matrix.length, col = matrix[0]
.length;
int[
] res =
newint
[row * col]
;for
(int i =
0; i < res.length; i++
)else
if(r ==0)
else
}else
else
if(c ==0)
else}}
return res;
}
力扣 54 螺旋矩陣
給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...
力扣54 螺旋矩陣
原題 給你乙個m行n列的矩陣matrix,請按照 順時針螺旋順序 返回矩陣中的所有元素。個人理解 把自己比作正在行走的 棋子,按照右,下 左,上的順序進行移動。每一次碰到編輯觸發換方向,每一次還方向,走路的行為發生變化,走路的行為就是x,y的座標。設定好邊界和觸發邊界換向的條件和邊界的變化就可以解決...
54 螺旋矩陣
給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...