重走力扣hot的矩阵

目录

矩阵置零

螺旋矩阵


矩阵置零

73. 矩阵置零 - 力扣(LeetCode)

法一:

引入两个HashSet容器,分别记录元素为0的横坐标与纵坐标

空:O(M+N)

代码

复制代码
   class Solution_2026_1_26_1 {
        int m;
        int n;
        public void setZeroes(int[][] matrix) {
            Set<Integer> row_zero=new HashSet();
            Set<Integer> col_zero=new HashSet();
            m=matrix.length;
            n=matrix[0].length;
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(matrix[i][j]==0){
                        row_zero.add(i);
                        col_zero.add(j);
                    }
                }
            }
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    //Set无get方法
                    if(row_zero.contains(i)||col_zero.contains(j)){
                        matrix[i][j]=0;
                    }

                }
            }


        }
    }

优化:空间复杂度优化为O(1)

重点:区分第一行和第一列的0是本身就是0还是被修改为0的

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        //进行优化 空间复杂度降低为O(1)
        boolean hasRowZero=false;
        boolean hasColZero=false;
        int m=matrix.length;
        int n=matrix[0].length;
         //检查第一行是否有为0的
         for(int i=0;i<n;i++){
            //检查第一行是否为空 
            //但本质上第一行处理的是列
            if(matrix[0][i]==0){
                hasRowZero=true;
                break;
            }
         }

            for(int i=0;i<m;i++){
            //检查第一列是否为空 
            //但本质上第一列处理的是行
            if(matrix[i][0]==0){
                hasColZero=true;
                break;
            }
         }
         //遍历二维数组 进行标记
         for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[i][j]==0){
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
         }

         for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[0][j]==0||matrix[i][0]==0){
                    matrix[i][j]=0;
                }
            }
         }
         //单独处理第一行为0的情况
         if(hasRowZero){
            for(int i=0;i<n;i++){
                matrix[0][i]=0;
            }
         }

         if(hasColZero){
            for(int i=0;i<m;i++){
                matrix[i][0]=0;
            }
         }
        
    }
}

螺旋矩阵

54. 螺旋矩阵 - 力扣(LeetCode)

个人认为关键点就是理清除过程,先从左往右处理上边界,然后从上往下处理右边界,然后从右往左处理下边界,最后在从下往上处理左边界即可,理清楚过程即可

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        List<Integer> ret=new ArrayList<>();
        int left=0;
        int right=n-1;
        int top=0;
        int bottom=m-1;
        while(left<=right&&top<=bottom){
            for(int i=left;i<=right;i++){
                ret.add(matrix[top][i]); //从左往右处理
            }
            top++; //从上往下
            for(int i=top;i<=bottom;i++){
                ret.add(matrix[i][right]); //从下往上处理
            }
            right--; //从后往前
            if(top<=bottom){
                for(int i=right;i>=left;i--){
                    //从后往前
                    ret.add(matrix[bottom][i]);
                }
                //从下往上
                bottom--;
            }
            if(left<=right){
                for(int i=bottom;i>=top;i--){
                    ret.add(matrix[i][left]);
                }
                //从前往后
                left++;
            }
        }
        return ret;
    
    }
}
相关推荐
靴子学长33 分钟前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv
智算菩萨34 分钟前
【OpenGL】10 完整游戏开发实战:基于OpenGL的2D/3D游戏框架、物理引擎集成与AI辅助编程指南
人工智能·python·游戏·3d·矩阵·pygame·opengl
寒秋花开曾相惜1 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Гений.大天才1 小时前
2026年计算机领域的年度主题与范式转移
算法
njidf1 小时前
C++与Qt图形开发
开发语言·c++·算法
ZoeJoy81 小时前
算法筑基(一):排序算法——从冒泡到快排,一文掌握最经典的排序算法
数据结构·算法·排序算法
qwehjk20081 小时前
代码动态生成技术
开发语言·c++·算法
承渊政道2 小时前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
Frostnova丶2 小时前
LeetCode 2573. 找出对应 LCP 矩阵的字符串
算法·leetcode·矩阵
承渊政道2 小时前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法