1. 程式人生 > >leetcode 54 spiral matrix

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;     } }