LeetCode-073-矩阵置零
矩阵置零
题目描述:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
进阶:
- 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
- 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
- 你能想出一个仅使用常量空间的解决方案吗?
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:穷举法
首先,声明2个List分别为zeroRows和zeroColumns用来记录行和列中存在为0元素的行号和列号,然后2次双重遍历matrix数组,分别获取到存在元素为0的行号和列号,并存到zeroRows和zeroColumns中,最后遍历zeroRows和zeroColumns中的行号和列号,将matrix数组中相应的行和列的所有值都置为0。
说明:这是最笨的方法,待优化。
import java.util.ArrayList;
import java.util.List;
public class LeetCode_073 {
    public static void setZeroes(int[][] matrix) {
        List<Integer> zeroRows = new ArrayList<>();
        List<Integer> zeroColumns = new ArrayList<>();
        // 获取哪些行存在元素为0
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                if (matrix[i][j] == 0) {
                    zeroRows.add(i);
                    break;
                }
            }
        }
        // 获取哪些列存在元素为0
        for (int i = 0; i < matrix[0].length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                if (matrix[j][i] == 0) {
                    zeroColumns.add(i);
                    break;
                }
            }
        }
        // 将存在元素为0的行全都置为0
        for (int i = 0; i < matrix.length; i++) {
            if (zeroRows.contains(i)) {
                for (int j = 0; j < matrix[i].length; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        // 将存在元素为0的列全都置为0
        for (int j = 0; j < matrix[0].length; j++) {
            if (zeroColumns.contains(j)) {
                for (int i = 0; i < matrix.length; i++) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
    public static void main(String[] args) {
        int[][] matrix = new int[][]{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
        setZeroes(matrix);
        for (int[] ints : matrix) {
            for (int anInt : ints) {
                System.out.print(anInt);
            }
            System.out.println();
        }
    }
}
【每日寄语】 自立更生,艰苦奋斗。
LeetCode-073-矩阵置零的更多相关文章
- LeetCode:矩阵置零【73】
		LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], ... 
- Java实现 LeetCode 73 矩阵置零
		73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ... 
- leetcode 73 矩阵置零 Python
		矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1 ... 
- LeetCode 73. 矩阵置零(Set Matrix Zeroes)
		题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1 ... 
- 【python】Leetcode每日一题-矩阵置零
		[python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ... 
- 073 Set Matrix Zeroes 矩阵置零
		给定一个 m x n 的矩阵,如果一个元素为 0 ,则将这个元素所在的行和列都置零.你有没有使用额外的空间?使用 O(mn) 的空间不是一个好的解决方案.使用 O(m + n) 的空间有所改善,但仍不 ... 
- leetcode[73] Set Matrix Zeroes 将矩阵置零
		给定一个矩阵,把零值所在的行和列都置为零.例如: 1 2 3 1 3 1 1 1 操作之后变为 1 3 0 0 0 1 1 方法1: 赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ... 
- leetcode.矩阵.73矩阵置零-Java
		1. 具体题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: 输出:[ [ [1,1,1], [1,0,1], [ ... 
- leetcode刷题-73矩阵置零
		题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: ... 
- Leetcode 矩阵置零
		题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用 O(mn) 的额外空间,但这 ... 
随机推荐
- servlet单例模式以及servlet的请求流程
			 目录 一.servlet 单例模式: 二.servlet的请求流程: ★ 流程: ★ 详细过程如下: 一.servlet 单例模式: tomcat服务器,通过Java的反射机制来自动调用servl ... 
- libevent网络库
			1.概述 libevent是一个C语言编写的.轻量级开源高性能事件通知库.作为底层网络库,已经被广泛应用(如:memcached.Vomit.Nylon.Netchat等).主要有以下几个亮点: 事件 ... 
- ApacheCN 计算机视觉译文集 20211110 更新
			OpenCV3 和 Qt5 计算机视觉 零.前言 一.OpenCV 和 Qt 简介 二.创建我们的第一个 Qt 和 OpenCV 项目 三.创建一个全面的 Qt + OpenCV 项目 四.Mat和Q ... 
- JQuery扩展方法实现Form表单与Json互相转换
			1.把表单转换出json对象 //把表单转换出json对象 $.fn.toJson = function () { var self = this, json = {}, push_counters ... 
- 隐式意图&显示意图
			1 隐式意图 通过指定一组动作或者数据 开启activity 2 显示意图 通过指定具体包名和类名 开启activity 总结 (1)显示意图更加安全一些 ( ... 
- iOS时间处理之时间对比  by Nicky.Tsui
			通过项目需求, 服务器返回了一个 order_canceled_time 订单自动取消时间 如果我要跟当前时间做一个对比,然后生成出一个倒计时的时间 那么首先我们要知道 order_cancel ... 
- 生成树协议(STP)的精髓知识
			STP生成树协议 1.STP介绍 2.STP生成树算法 1.STP - Spanning tree protocol (生成树协议)是逻辑上断开环路,防止广播风暴的产生.当线路故障,阻塞接口 ... 
- vue中的钩子函数
			什么是vue的钩子函数? Vue 实例在被创建时,会经过一系列的初始化过程,初始化过程中会运行一些函数,叫做生命周期钩子函数,通过运用钩子函数,用户在可以在Vue实例初始化的不同阶段添加自己的代码,以 ... 
- docker错误处理——docker Job for docker.service failed because the control process exited with error code.
			(15条消息) docker Job for docker.service failed because the control process exited with error code._Hel ... 
- Note -「矩阵树定理」学习笔记
			大概--会很简洁吧 qwq. 矩阵树定理 对于无自环无向图 \(G=(V,E)\),令其度数矩阵 \(D\),邻接矩阵 \(A\),令该图的 \(\text{Kirchhoff}\) 矩阵 \ ... 
