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;
	}
}

思考

已经看不进去官方题解了,我觉着我这个也不错。

posted @ 2025-06-16 17:02  尼兰  阅读(13)  评论(0)    收藏  举报