题解 | #螺旋矩阵#
螺旋矩阵
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]);
}
}
}

查看12道真题和解析