LeetCode-螺旋矩阵
题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
我的解答思路
就像剥洋葱一样,一层一层的拨开,有问题的地方是计算机不知道什么时候剥完洋葱,会在轮空之后,多加一个元素,此时通过判断轮空之后list的size是否发生了变化,如果没有变化,说明洋葱剥完了,不用再继续了。
public class Main {
public static void main(String[] args) throws Exception {
// int[][] accounts = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
// int[][] accounts = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
// int[][] accounts = {{1},{2},{3}};
// int[][] accounts={{1,2},{3,4}};
int[][] accounts={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20},{21,22,23,24}};
List<Integer> temp=spiralOrder(accounts);
System.out.println(temp.size());
for(Integer i:temp){
System.out.println(i);
}
}
public static List<Integer> spiralOrder(int[][] matrix) {
int layer = 0;
int xlen = matrix.length;
int ylen = matrix[0].length;
List<Integer> temp = new ArrayList<>();
int newCount = 0;
int oldCount = -1;
do {
if (oldCount == newCount) {
break;
}
oldCount = temp.size();
for (int i = layer; i < ylen - layer; i++) {
temp.add(matrix[layer][i]);
}
newCount = temp.size();
if (newCount == oldCount) {
break;
}
oldCount = temp.size();
for (int i = layer + 1; i < xlen - layer; i++) {
temp.add(matrix[i][ylen - 1 - layer]);
}
newCount = temp.size();
if (newCount == oldCount) {
break;
}
oldCount = temp.size();
for (int i = ylen - 2 - layer; i >= layer; i--) {
temp.add(matrix[xlen - 1 - layer][i]);
}
newCount = temp.size();
if (oldCount == newCount) {
break;
}
oldCount = temp.size();
for (int i = xlen - 2 - layer; i >= layer + 1; i--) {
temp.add(matrix[i][layer]);
}
newCount = temp.size();
layer++;
} while (layer < Math.min(xlen, ylen));
return temp;
}
}
思考
已经看不进去官方题解了,我觉着我这个也不错。

浙公网安备 33010602011771号