题目列表
- 54. 螺旋矩阵
具体实现
54. 螺旋矩阵
class Solution {boolean[][] f ;int[] dx = new int[]{0, 1, 0, -1};int[] dy = new int[]{1, 0, -1, 0};public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<>();int m = matrix.length, n = matrix[0].length;f = new boolean[m][n];int d = 0;for(int i = 0, j = 0, t = 0; t < m * n; t++){// System.out.println(i + " " + j);res.add(matrix[i][j]);f[i][j] = true;int a = i + dx[d];int b = j + dy[d];if(a < 0 || a >= m || b < 0 || b >= n || f[a][b] == true){d = (d + 1) % 4;a = i + dx[d];b = j + dy[d];}i = a;j = b;}return res;}}
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; } }
