Matrix Zeroes
来自 <https://leetcode.com/problems/set-matrix-zeroes/>
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Follow up:
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
题目解读
给定一个矩阵,如果矩阵中的某个元素为0,则将其所在的整行和整列全部设置为0,在原来的矩阵中设置。
题目解析:
解法一:使用 O(mn)额外空间,创建一个和原来矩阵大小相同的矩阵matrixTemp,根据原来矩阵matrix的元素值设置matrix矩阵中行和列为。最后再将matrixTemp中的元素复制给matrix.
解法二:创建两个数组zeroRows和zeroCols,zeroRows记录那些行应该置为0,zeroCols记录那些列应该置为0.先遍历一遍矩阵,给数组zeroRows和zeroCols中的元素赋值。最后根据数组zeroRows和zeroCols中的元素,将矩阵中的某些行和列设置为0。
解法三:利用第0行和第0列记录将要置零的行和列,分如下四步
Analysis
This problem should be solved in place, i.e., no other array should be used. We can use the first column and the first row to track if a row/column should be set to 0.
Since we used the first row and first column to mark the zero row/column, the original values are changed.
Specifically, given, the following matrix
this problem can be solved by following 4 steps:
Step 1:
First row contains zero = true;
First column contains zero = false;
Step 2: use first row and column to mark zero row and column.
Step 3: set each elements by using marks in first row and column.
Step 4: Set first column and row by using marks in step 1.
来自 <http://www.programcreek.com/2012/12/leetcode-set-matrix-zeroes-java/>
解法一代码:
public class Solution { public void setZeroes(int[][] matrix) { int[][] matrixTemp = new int[matrix.length][matrix[0].length]; //将matrix中的元素全部复制给tempMatrix for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { matrixTemp[i][j] = matrix[i][j]; } } for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { if(0 == matrix[i][j]){ //将j列元素置零 for(int m=0; m<matrix.length; m++) { matrixTemp[m][j] = 0; } //将i行元素置零 for(int n=0; n<matrix[0].length; n++) { matrixTemp[i][n] = 0; } } } } for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { matrix[i][j] = matrixTemp[i][j]; } } } }
解法一性能:
解法二代码:
public class Solution { public void setZeroes(int[][] matrix) { //用于记录那些行应该设置为0 int[] zeroRows = new int[matrix.length]; for(int i=0; i<matrix.length; i++) { zeroRows[i] = 1; } //记录那些列应该设置为0 int[] zeroCols = new int[matrix[0].length]; for(int i=0; i<matrix[0].length; i++) { zeroCols[i] = 1; } for(int i=0; i< matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { if(0 == matrix[i][j]){ zeroRows[i] = 0; zeroCols[j] = 0; } } } //将行置为0 for(int i=0; i<matrix.length; i++) { if(0 == zeroRows[i]) { for(int j=0; j<matrix[0].length; j++) { matrix[i][j] = 0; } } } //将列置为0 for(int i=0; i<matrix[0].length; i++) { if(0 == zeroCols[i]) { for(int j=0; j<matrix.length; j++) { matrix[j][i]=0; } } } } }
解法二性能:
解法三代码
public class Solution { public void setZeroes(int[][] matrix) { /** * 记录第一行第一列是否为零 */ boolean firstRowZero = false; boolean firstColZero = false; /** * 判断第一列是否为0 */ for(int i=0; i<matrix.length; i++) { if(0 == matrix[i][0]) { firstColZero = true; } } /** * 判断第一行是否为0 */ for(int i=0; i<matrix[0].length; i++) { if(0 == matrix[0][i]) firstRowZero = true; } /** * 遍历整个矩阵,将要置为0的行和列标注在第0行和第0列 */ for(int i=0; i<matrix.length; i++) { for(int j=0; j<matrix[0].length; j++) { if(0 == matrix[i][j]){ matrix[0][j] = 0; matrix[i][0] = 0; } } } for(int i=1; i<matrix.length; i++) { for(int j=1; j<matrix[0].length; j++) { if((matrix[0][j] == 0) || (matrix[i][0] == 0)) matrix[i][j] = 0; } } /** * 第一行是否置零 */ if(firstRowZero) { for(int i=0; i<matrix[0].length; i++) matrix[0][i] = 0; } /** * 第一列是否置零 */ if(firstColZero) { for(int i=0; i<matrix.length; i++) matrix[i][0] = 0; } } }
解法三性能:
相关推荐
java java_leetcode-73-set-matrix-zeroes
《在IDE中高效进行LeetCode练习:leetcode-editor的深度解析》 在编程学习与技能提升的过程中,LeetCode作为一款广受欢迎的在线编程挑战平台,帮助众多开发者锻炼算法思维,提高编程能力。而为了进一步提升练习体验...
leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源
leetcode-cli-plugins leetcode-cli 的第 3 方插件。 什么是 如何使用 如何使用 插件 名称 描述 增强的命令 按公司或标签过滤问题 list 不要在同一台计算机上使 Chrome 的会话过期 login 不要在同一台计算机上使 ...
在IDE中解决LeetCode问题,支持leetcode.com与leetcode-cn.com,满足基本的做题需求。 理论上支持: IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion GoLand DataGrip Rider MPS Android Studio。
leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码
javascript js_leetcode题解之73-set-matrix-zeroes.js
~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/vsc-leetcode-cli/bin/leetcode /usr/local/bin/leetcode 修改模板 open ~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/...
解题思路思路和LeetCode-python 503.下一个更大元素 II一致,只是这里求的是下标的距离,而不是数值倒序搜索,用到栈,栈里存储索引情况1:若栈为
《PyPI官网下载 | leetcode-export-1.1.tar.gz》 在编程世界里,LeetCode是一个备受程序员喜爱的在线平台,它提供了大量的算法题目,帮助开发者提升编程技能和解决问题的能力。而Python作为一门广泛使用的高级编程...
leetcode-cheat 的发布 它是什么 ? 这是一个chrome 扩展,可以帮助您更高效地使用 leetcode。您可以从 重要: leetcode-cheat 现在只支持中文版。 也就是说不完全支持leetcode.com,但是你可以用leetcode-cn.com代替...
`swift-Swif-LeetCode-Utils` 是一个实用工具库,它为Swift程序员提供了方便快捷的方法来处理这些问题。这个项目可以帮助你更高效地进行LeetCode上的编程练习,提升你的解决方案的可读性和简洁性。 首先,让我们...
java java_leetcode-115-distinct-subsquences
java java_leetcode-112-path-sum
java java_leetcode-101-symmetric-tree
java java_leetcode-100-same-tree
java java_leetcode-110-balanced-binary-tree
970. 强整数对数运算function powerfulIntegers(x: number, y: number, bound: number): numb
java java_leetcode-113-path-sumII