給你一個?
m
?行?n
?列的矩陣?matrix
?,請按照?順時針螺旋順序?,返回矩陣中的所有元素
?一看到這個大家有沒有想到
?就是一個螺旋形狀,那這道題我們應該怎么解決?
? ? ? ?我們先來仔細的看,它這種螺旋形狀的遍歷是先【右-下-左-上】,所以我們可以先設置4個變量,去控制我們所需要遍歷形狀的邊界
int m=matrix.length;int n=matrix[0].length;//上下左右進行遍歷int up=0;int down=m-1;int left=0;int right=n-1;
那么循環結束的條件的是什么呢?
? ? ? ?我們是要將目標數組中的元素按照螺旋的規則加入一個list集合中,那么循環的條件是不是就是我們集合list中的元素小于目標數組中的元素時就可以執行遍歷,上文易得數組中每一個小數組的長度為n,數組中的有m個小數組,數組中的元素我們是不是可以用數組的個數*每個數組的長度
while(list.size()<m*n){}
先進行上層的從左向右遍歷:
//將上層的元素從左往右開始遍歷//遍歷的條件是最上層不能大于最下層if(up<=down){//從左向右for(int i=left;i<=right;i++){list.add(matrix[up][i]);}//上邊界下移up++;}
再從最后一列從上往下遍歷
//將最后一列的元素從上往下開始遍歷if(left<=right){//從上到下for(int i=up;i<=down;i++){list.add(matrix[i][right]);}//往左移一列right--;}
最后一層從右往左遍歷
//將最后一行從右往左遍歷if(up<=down){for(int i=right;i>=left;i--){list.add(matrix[down][i]);}down--;}
第一列從下自上遍歷
//將第一列進行從小往上進行遍歷if(left<=right){for(int i=down;i>=up;i--){list.add(matrix[i][left]);}left++;}