LeetCode-073-矩阵置零
矩阵置零
题目描述:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。解法一:穷举法
进阶:
示例说明请见LeetCode官网。
- 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
- 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
- 你能想出一个仅使用常量空间的解决方案吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
首先,声明2个List分别为zeroRows和zeroColumns用来记录行和列中存在为0元素的行号和列号,然后2次双重遍历matrix数组,分别获取到存在元素为0的行号和列号,并存到zeroRows和zeroColumns中,最后遍历zeroRows和zeroColumns中的行号和列号,将matrix数组中相应的行和列的所有值都置为0。
【LeetCode-073-矩阵置零】说明:这是最笨的方法,待优化。
import java.util.ArrayList;
import java.util.List;
public class LeetCode_073 {
public static void setZeroes(int[][] matrix) {
List zeroRows = new ArrayList<>();
List 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();
}
}
}
【每日寄语】 自立更生,艰苦奋斗。
推荐阅读
- 第6.2章(设置属性)
- vue-cli|vue-cli 3.x vue.config.js 配置
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- angular2内置管道
- 从战略性的角度可以配置股票
- 现役联盟前十怎么排(詹姆斯榜首无悬念!杜兰特库里位置不确定!)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 普通人进阶的三个过程-很多人都知道,但却本末倒置
- 缓存有关的配置和属性
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件