day11 leetcode-hot100-18(矩阵1)

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

1.暴力法

这个题暴力法也很容易理解,直接双层for循环找到0的位置,然后在双层for循环置零。

2.标记法(空间换时间)

思路

(1)设计两个行数组与列数组,标记遍历每个0所在行与列。

(2)然后用标记数组作为判断条件,再双层for循环判断该位置是否为0.判断方法是该行或该列是否被标记。

具体代码
java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        int[] hang =new int[m];
        int[] lie = new int[n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j]==0){
                    hang[i]=1;
                    lie[j]=1;
                }
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(hang[i]==1 || lie[j]==1){
                    matrix[i][j]=0;

                }
            }
        }


    }
}

3.优化标记法 (空间复杂度O(1))

思路

(1)为了不额外创建数组,将第一行与第一列作为标记数组,但是要提前将第一行与第一列是否为存在0先进行标记。其余思路与方法2一致。

具体代码
java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int hang_f=0;
        int lie_f=0;
        int m=matrix.length;
        int n=matrix[0].length;
        for(int i=0;i<n;i++){
            if(matrix[0][i]==0){
                hang_f=1;
                break;
            }
        }

        for(int i=0;i<m;i++){
            if(matrix[i][0]==0){
                lie_f=1;
                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;
                }
            }
        }

        if(hang_f==1){
            for(int i=0;i<n;i++){
                matrix[0][i]=0;
            }
        }

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

        
    }
}
相关推荐
妄想出头的工业炼药师27 分钟前
GS slam mono
算法·开源
_日拱一卒1 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
用户987409238873 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法
计算机安禾3 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
AI科技星4 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
风筝在晴天搁浅4 小时前
美团 LeetCode 692.前K个高频单词
算法·leetcode·职场和发展
地平线开发者5 小时前
量化训练时 fusebn/withbn 简介
算法·自动驾驶
不做无法实现的梦~5 小时前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
墨白曦煜5 小时前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)
笔记·算法
z200509305 小时前
今日算法(回溯子集)(模版题)
数据结构·算法·leetcode