思路
因爲是自己想的笨辦法,所以代碼不優雅哈
1. 設置變量cur表示每次移動方向,初始化爲1,每次與4取餘表示方向;
2. 在每個方向遍歷過程中注意橫縱座標邊界與cur之間的變化;
3. 循環終止條件爲集合res保存個數等於總個數。
代碼
public ArrayList<Integer> printMatrix(int [][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
ArrayList<Integer> res = new ArrayList<Integer>();
// 注意判斷條件爲小於;
// 設置 cur表示掃描方向,初始化爲1,爲0不合適,因爲每個方向遍歷時跟其有關
int i = 0, j = 0, cur = 1;
while(res.size() < row * col){
if(cur % 4 == 1){
while(j <= col-1 - cur/4){
res.add(matrix[i][j]);
if(j == col-1 - cur/4){
i++;
cur++;
break;
}
j++;
}
}
if(cur % 4 == 2){
while (i <= row - 1 - cur/4){
res.add(matrix[i][j]);
if(i == row - 1 - cur/4){
j--;
cur++;
break;
}
i++;
}
}
if(cur % 4 == 3){
while(j >= cur/4){
res.add(matrix[i][j]);
if(j == cur/4){
i--;
cur++;
break;
}
j--;
}
}
if(cur % 4 == 0){
while (i >= cur/4){
res.add(matrix[i][j]);
if(i == cur/4){
j++;
cur++;
break;
}
i--;
}
}
}
return res;
}