给定一个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;
}
本文介绍了一种螺旋遍历矩阵的算法实现,该算法能够按顺时针螺旋顺序遍历给定的m*n矩阵,并返回所有元素。文章通过具体实例展示了如何从左至右、上至下、右至左、下至上逐层遍历矩阵直至所有元素都被访问。

680

被折叠的 条评论
为什么被折叠?



