classSolution{public List<Integer>spiralOrder(int[][] matrix){
List ans =newArrayList();if(matrix.length ==0)return ans;int R = matrix.length, C = matrix[0].length;boolean[][] seen =newboolean[R][C];int[] dr ={0,1,0,-1};int[] dc ={1,0,-1,0};int r =0, c =0, di =0;for(int i =0; i < R * C; i++){
ans.add(matrix[r][c]);
seen[r][c]=true;int cr = r + dr[di];int cc = c + dc[di];if(0<= cr && cr < R &&0<= cc && cc < C &&!seen[cr][cc]){
r = cr;
c = cc;}else{
di =(di +1)%4;
r += dr[di];
c += dc[di];}}return ans;}}
作者:LeetCode
链接:https://leetcode-cn.com/problems/spiral-matrix/solution/luo-xuan-ju-zhen-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
解法三:这种做法跟我的比较像,不过比我的简化好多
classSolution{public List < Integer >spiralOrder(int[][] matrix){
List ans =newArrayList();if(matrix.length ==0)return ans;int r1 =0, r2 = matrix.length -1;int c1 =0, c2 = matrix[0].length -1;while(r1 <= r2 && c1 <= c2){for(int c = c1; c <= c2; c++) ans.add(matrix[r1][c]);for(int r = r1 +1; r <= r2; r++) ans.add(matrix[r][c2]);if(r1 < r2 && c1 < c2){for(int c = c2 -1; c > c1; c--) ans.add(matrix[r2][c]);for(int r = r2; r > r1; r--) ans.add(matrix[r][c1]);}
r1++;
r2--;
c1++;
c2--;}return ans;}}
作者:LeetCode
链接:https://leetcode-cn.com/problems/spiral-matrix/solution/luo-xuan-ju-zhen-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。