螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix,请按照顺时针螺旋顺序 ,返回矩阵中的所有元素。
例如:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
题目来源:力扣(螺旋矩阵)
解法:
1.思路:
从矩阵的左上角开始遍历——>右上角——>右下角——>左下角——>左上角减一;依此循环,所以需要四个变量记录上下左右的位置,移动指针变量。
public class LXJZ {
public static void main(String[] args) {
//输入 mxn 维矩阵
int[][] matrix = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(spiralOrder(matrix));
}
//定义方法螺旋遍历矩阵
public static List<Integer> spiralOrder(int[][] matrix) {
//一圈一圈的旋转遍历
//1.定义集合存放矩阵中遍历到的元素
ArrayList<Integer> list = new ArrayList<>();
int columns = matrix[0].length;//矩阵列数
int rows = matrix.length;//矩阵行数
int left = 0,top = 0,right = columns-1,bottom = rows-1;//上下左右的初始位置
while(left <= right && top <= bottom){
//从左向右的行
for(int column = left;column<=right;column++){
list.add(matrix[top][column]);
}
//从上向下的列
for(int row = top+1;row<=bottom;row++){
list.add(matrix[row][right]);
}
if(left < right && top < bottom){
//从右向左的行
for(int column = right-1;column>left;column--){
list.add(matrix[bottom][column]);
}
//从下向上的列
for(int row = bottom;row>top;row--){
list.add(matrix[row][left]);
}
}
//改变四个指针的位置,即分别往里圈移动一位
left++;
right--;
top++;
bottom--;
}
return list;
}
}