题解 | #螺旋矩阵#
螺旋矩阵
https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
import java.util.ArrayList; public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return new ArrayList<>(); } ArrayList<Integer> back = new ArrayList<>(); int i = matrix.length; int j = matrix[0].length ; if(i == 1 && j==1) { back.add(matrix[0][0]); return back; } for (int k =0; k<(i+1)/2; k++) { int l = k; for(; l<j-1-k; l++) { if(back.size() == i*j) { return back; } back.add(matrix[k][l]); } for(int m = k; m<i-k-1; m++) { if(back.size() == i*j) { return back; } back.add(matrix[m][l]); } // 翻转 reverseThis (back, k,l,i,j, matrix); //break; //若是最终相差一个,则把最后一个插入 if(back.size() == i*j-1 && i==j) { back.add(matrix[k+1][k+1]); } } return back; } /** * 翻转 * @param back * @param k 0 * @param l 2 * @param i 4 * @param j 3 * @param matrix */ private void reverseThis(ArrayList<Integer> back, int k, int l, int i, int j, int[][] matrix) { //for(int m = j; m<j-1; m++) int m = l; for(; m > k; m--) { if(back.size() == i*j) { return ; } back.add(matrix[i-1-k][m]); } for(int n = i-1-k; n>k; n--) { if(back.size() == i*j) { return ; } back.add(matrix[n][m]); } } }