import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param matrix int整型二维数组
     * @return int整型一维数组
     */
    public int[] spiralOrder (int[][] matrix) {
        List<Integer> result = new ArrayList<>();
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return new int[0]; // 返回一个空数组
        }
        int m = matrix.length; // 矩阵的行数
        int n = matrix[0].length; // 矩阵的列数
        int top = 0; // 上边界
        int bottom = m - 1; // 下边界
        int left = 0; // 左边界
        int right = n - 1; // 右边界
        while (top <= bottom && left <= right) {
            // 遍历上边界从左到右
            for (int i = left; i <= right; i++) {
                result.add(matrix[top][i]);
            }
            top++;
            // 遍历右边界从上到下
            for (int i = top; i <= bottom; i++) {
                result.add(matrix[i][right]);
            }
            right--;
            // 在矩阵内部时遍历下边界从右到左
            if (top <= bottom) {
                for (int i = right; i >= left; i--) {
                    result.add(matrix[bottom][i]);
                }
                bottom--;
            }
            // 在矩阵内部时遍历左边界从下到上
            if (left <= right) {
                for (int i = bottom; i >= top; i--) {
                    result.add(matrix[i][left]);
                }
                left++;
            }
        }
        int[] resArray = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            resArray[i] = result.get(i);
        }
        return resArray;
    }
}
本题知识点分析:
1.数学模拟
2.数组遍历
3.集合转数组
4.集合存取
本题解题思路分析:
1.纯数学模拟
2.按照规则顺时针遍历,先从上边界开始,从左到右,然后从右边界开始,从上到下
3.此时判断左边界有没有超过右边界,判断是否已经遍历完毕
4.判断上边界有没有超过下边界,判断是否遍历完毕
本题使用编程语言: Java
如果你觉得对你有帮助的话,可以点个赞~

京公网安备 11010502036488号