leetcode 54 spiral matrix
題目要求:按照特定順序將二維陣列的元素儲存至list中(順時針遍歷)
思想:由外至內的順時針遍歷,可設定四個邊界值,儲存當前該遍歷的圈的界限,在一個死迴圈中執行四個方向的一維陣列遍歷操作,當無陣列可遍歷時跳出迴圈。
tips:
獲取二維陣列行與列的方法(注意矩陣為空的情況,此時直接獲取列會出錯,因為沒有matrix[0])
程式碼如下:
class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> ord = new ArrayList<Integer>(); int row = matrix.length; if(row==0) return ord; int col = matrix[0].length; int l=0,r=col-1,u=0,d=row-1; while(true){ for(int i=l;i<=r;i++) ord.add(matrix[u][i]); if(++u>d) break; for(int i=u;i<=d;i++) ord.add(matrix[i][r]); if(--r<l) break; for(int i=r;i>=l;i--) ord.add(matrix[d][i]); if(--d<u) break; for(int i=d;i>=u;i--) ord.add(matrix[i][l]); if(++l>r) break; } return ord; } }