题目列表

  • 54. 螺旋矩阵

    具体实现

    54. 螺旋矩阵

    1. class Solution {
    2. boolean[][] f ;
    3. int[] dx = new int[]{0, 1, 0, -1};
    4. int[] dy = new int[]{1, 0, -1, 0};
    5. public List<Integer> spiralOrder(int[][] matrix) {
    6. List<Integer> res = new ArrayList<>();
    7. int m = matrix.length, n = matrix[0].length;
    8. f = new boolean[m][n];
    9. int d = 0;
    10. for(int i = 0, j = 0, t = 0; t < m * n; t++){
    11. // System.out.println(i + " " + j);
    12. res.add(matrix[i][j]);
    13. f[i][j] = true;
    14. int a = i + dx[d];
    15. int b = j + dy[d];
    16. if(a < 0 || a >= m || b < 0 || b >= n || f[a][b] == true){
    17. d = (d + 1) % 4;
    18. a = i + dx[d];
    19. b = j + dy[d];
    20. }
    21. i = a;
    22. j = b;
    23. }
    24. return res;
    25. }
    26. }
    class Solution {
      public List<Integer> spiralOrder(int[][] matrix) {
          List<Integer> res = new ArrayList<>();
          int t = 0, b = matrix.length - 1, l = 0, r = matrix[0].length - 1;
          while(t <= b && l <= r){
              if(t == b){
                  for(int i = l; i <= r; i++) res.add(matrix[t][i]);
              }else if(l == r){
                  for(int i = t; i <= b; i++) res.add(matrix[i][l]);
              }else{
                  for(int i = l; i < r; i++) res.add(matrix[t][i]);
                  for(int i = t; i < b; i++) res.add(matrix[i][r]);
                  for(int i = r; i > l; i--) res.add(matrix[b][i]);
                  for(int i = b; i > t; i--) res.add(matrix[i][l]);
              }
              t++; b--;
              l++; r--;
          }
          return res;
      }
    }