力扣之螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

分析:本题力扣所给标签是中等题,但是其实本题除了几个需要注意的点外,整体难度也就是简单题。现在我们来分析一下,他给你一个m行n列的矩阵,那么最普通的情况就是m>1,n>1这种的矩阵,比较极限的情况就是m=1或者n=1的行矩阵和列矩阵,那么这三种情况就是我们本题所注意注意处理的情况了。

1、我们声明四个指针,分别代表顶部行号,底部行号,左侧列号与右侧列号,用着四个指针来指示我们遍历的边界。
2、我们先从最顶部开始从左到右遍历,然后按照顺时针顺序遍历
3、当我们开始往下遍历时,此时就会遇到两种情况了,即m>1或者m=1,如果m=1那我们就不用遍历了,所以我们应该写一个遍历判断,如果>1,那么进入判断。
4、同理当我们从右向左,从下向上遍历时,也要判断条件。如果m = 1,n = 1,那么就不用从右往左遍历了啊。

由此·便可以写出代码如下:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        
        List<Integer> list = new ArrayList<>();
        int top = 0;
        int bottom = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length - 1;

        while(top <= bottom && left <= right){

            for(int i = left; i <= right; i++){
                list.add(matrix[top][i]);
            }
            
            if(top < bottom){
                for(int i = top+1; i <= bottom; i++){
                    list.add(matrix[i][right]);
                }
            }
            
            if(top < bottom && left < right){
                for(int i = right-1; i >= left; i--){
                    list.add(matrix[bottom][i]);
                }
            }

            if(top < bottom && left < right){
                for(int i = bottom-1; i > top; i--){
                    list.add(matrix[i][left]);
                }
            }

            top++;
            bottom--;
            left++;
            right--;
            
        }

        return list;
    }
}

你可能感兴趣的:(算法学习笔记,JAVA学习笔记,矩阵,leetcode,算法)