给定一个包含 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)
边界的界定,和二分法中边界的界定类似,要找到一个判定条件。