给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
思路是对的,就是在边界的处理上,有一点小问题。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<>();
if(matrix==null || matrix.length==0 || matrix[0].length == 0 ){return list;}
int rows = matrix.length-1 ;
int columns = matrix[0].length ;
int start = 0 ;
int end = columns-1 ;
while(start <= end && start<=rows){
for(int i = start ; i <= end ; i ++){
list.add(matrix[start][ i]);
}
for(int i = start + 1 ; i <= rows ; i ++){
list.add(matrix[i][end]);
}
if(start < end && start< rows){
for(int i = end-1 ; i > start ; i --){
list.add(matrix[rows][i]);
}
for(int i =rows ; i > start ; i -- ){
list.add(matrix[i][start]);
}}
start ++ ;
end -- ;
rows -- ;
}
return list ;
}
}
时间复杂度:O(mn)
空间复杂度:O(m+n)
边界的界定,和二分法中边界的界定类似,要找到一个判定条件。