力扣题解(54. 螺旋矩阵),带注释

题目描述

链接:点我

题解

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length , n = matrix[0].length;
        // int[] ans = new int[m*n];
        ArrayList<Integer> list = new ArrayList<Integer>();
        //定义4个边界
        int up = 0 , right = n - 1 , down = m - 1 , left = 0;
        // while(true){
        //     for(int i = left;i <= right; i++) list.add(matrix[up][i]);
        //     if(up++ >= down) break;  //更新边界越界就退出循环,同时表示也遍历完成,下方同理
            
        //     for(int i = up;i <= down; i++) list.add(matrix[i][right]);
        //     if(right-- <= left) break;
            
        //     for(int i = right;i >= left; i--) list.add(matrix[down][i]);
        //     if(down-- <= up) break;
            
        //     for(int i = down;i >= up; i--) list.add(matrix[i][left]);
        //     if(left++ >= right) break;
        // }
        

        //法二:相同的思维
        int k = 0;  //类似数组的长度道理,只需要遍历那么多次就行了
        while(k < m*n){
            for(int i = left;i <= right; i++) {
                //边界不可越出,下方同理
                if(up <= down){
                    list.add(matrix[up][i]);
                    k++;
                }
            }
            up++; //每次遍历一行/列都要更新边界,下方同理
            
            for(int i = up;i <= down; i++) {
                if(right >= left){
                    list.add(matrix[i][right]);
                    k++;
                }             
            }
            right--;
            
            for(int i = right;i >= left; i--) {
                if(down >= up){
                    list.add(matrix[down][i]);
                    k++;
                }           
            }
            down--;
            
            for(int i = down;i >= up; i--) {
                if(left <= right){
                    list.add(matrix[i][left]);
                    k++;
                }    
            }
            left++;
        }
        return list;
    }
}
相关推荐
2013092416272 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告
人工智能·算法
如何原谅奋力过但无声2 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串
算法·leetcode
玄冥剑尊3 小时前
贪心算法进阶
算法·贪心算法
玄冥剑尊3 小时前
贪心算法深化 I
算法·贪心算法
52Hz1183 小时前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
DuHz3 小时前
矩阵束法(Matrix Pencil)用于 FMCW 雷达干扰抑制:论文精读
人工智能·机器学习·矩阵
BHXDML3 小时前
第一章:线性回归& 逻辑回归
算法·逻辑回归·线性回归
iAkuya4 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)
算法·leetcode·职场和发展
Remember_9935 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Gorgous—l5 小时前
数据结构算法学习:LeetCode热题100-动态规划篇(下)(单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号)
数据结构·学习·算法