算法篇13-LeetCode54. 螺旋矩阵

思路简单,抠细节的题目

54. 螺旋矩阵

这题目思路特别简单,但是细节是真的很细的东西。就是依次从上右下左这样不断的加入到list中去。但是细节方面要考虑很多,特别是下和左。因为这个问题还错了几次呢。

public List<Integer> spiralOrder(int[][] matrix) {
        /**
         *
         * 功能描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
         *
         * @param: [matrix]
         * @return: java.util.List<java.lang.Integer>
         * @auther: smallfish
         * @date: 2020-03-26 17:22
         */
        List<Integer> list = new ArrayList<>();
        if (matrix.length == 0) {
            return list;
        }
        int width = matrix.length;
        int length = matrix[0].length;
        //计算层数
        int layer = (Math.min(length, width) + 1) / 2;
        for (int i = 0; i < layer; i++) {
            //上
            for (int j = i; j < length - i; j++) {
                list.add(matrix[i][j]);
            }
            //右
            for (int j = i + 1; j < width - i; j++) {
                list.add(matrix[j][length - 1 - i]);
            }
            //下
            for (int j = length - i - 2; j >= i && width - 1 - i != i; j--) {
                list.add(matrix[width - 1 - i][j]);
            }
            //左
            for (int j = width - i - 2; j >= i + 1 && (length - 1 - i) != i; j--) {
                list.add(matrix[j][i]);
            }
        }
        return list;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容