给定一个m*n的矩阵,按照螺旋顺序返回所有元素。
举例: 1 2 3
8 9 4
7 6 5
返回的应该是1 2 3 4 5 6 7 8 9.
从左边开始,当碰撞到右边的边界时,转向 (向下)。然后从右到左,碰撞到左边边界时,转向 (向上)。一直到最后一个元素。
public static ArrayList<Integer> getRoateNum(int[][] arr){
ArrayList<Integer> roateNums = new ArrayList<>();
int rowSta = 0;
int rowEnd = arr.length-1;
int columnSta = 0;
int columnEnd = arr[0].length-1;
int total = (rowEnd+1)*(columnEnd+1);
int len = 0;
while(len<total){
//left to right
for(int i=columnSta; i<=columnEnd; i++){
roateNums.add(arr[rowSta][i]);
len++;
}
rowSta++;
//top to bottom
for(int i=rowSta; i<=rowEnd; i++){
roateNums.add(arr[i][columnEnd]);
len++;
}
columnEnd--;
//right to left
for(int i=columnEnd; i>=columnSta; i--){
roateNums.add(arr[rowEnd][i]);
len++;
}
rowEnd--;
//bottom to top
for(int i=rowEnd; i>=rowSta; i--){
roateNums.add(arr[i][columnSta]);
len++;
}
columnSta++;
}
return roateNums;
}