//Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
//
//For example,
//Given the following matrix:
//
//[
// [ 1, 2, 3 ],
// [ 4, 5, 6 ],
// [ 7, 8, 9 ]
//]
//You should return [1,2,3,6,9,8,7,4,5].
import java.util.ArrayList;
import java.util.List;
public class test{
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<Integer>();
if(matrix == null || matrix.length == 0){ //如果输入为空,则直接返回空结果
return result;
}
int maxRow = matrix.length-1; //最大行数减1
int maxCol = matrix[0].length-1; //最大列数减1
int minRow = 0; //最小行数
int minCol = 0; //最小列数
while(true){ //一直循环
for(int col = minCol;col<=maxCol;col++){ //从最小行开始遍历,行不变,列变
result.add(matrix[minRow][col]);
}
minRow++; //最小行加1
if(minRow>maxRow){ //如果最小行大于最大行,则跳出循环
break;
}
for(int row = minRow;row<=maxRow;row++){ //从最大列列开始,行变,列不变
result.add(matrix[row][maxCol]);
}
maxCol--; //最大列减1
if(minCol>maxCol){ //如果最小列大于最大列,则跳出循环
break;
}
for(int col = maxCol;col>=minCol;col--){ //从最大行开始,行不变,列变
result.add(matrix[maxRow][col]);
}
maxRow--; //最大行减1
if(minRow>maxRow){ //如果最小行大于最大行,则跳出循环
break;
}
for(int row = maxRow;row>=minRow;row--){ //从最小列开始,行变,列不变
result.add(matrix[row][minCol]);
}
minCol++; //最小列加1
if(minCol>maxCol){ //如果最小列大于最大列,则跳出循环
break;
}
}
return result;
}
public static void main(String[] args){
int[][] nums = {
{1,2,3},
{4,5,6},
{7,8,9}
};
List<Integer> result = spiralOrder(nums);
System.out.println(result);
}
}
leetcode 54. Spiral Matrix
最新推荐文章于 2024-09-21 22:27:00 发布