LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)
题目:矩阵置0
难度:Easy
题目内容:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.
翻译:
给定一个m x n矩阵,如果一个元素是0,就把它的整行和列设为0。
要求:就地置0。
Example 1:
- Input:
- [
- [1,1,1],
- [1,0,1],
- [1,1,1]
- ]
- Output:
- [
- [1,0,1],
- [0,0,0],
- [1,0,1]
- ]
Example 2:
- Input:
- [
- [0,1,2,0],
- [3,4,5,2],
- [1,3,1,5]
- ]
- Output:
- [
- [0,0,0,0],
- [0,4,5,0],
- [0,3,1,0]
- ]
我的思路:因为要求就地,所以不能新建一个矩阵,然后遇见0就将所在行列全部置0
所以就全部循环一遍,将所有的0的行列下标用List<Integer[]>记录下来,0号位为行,1号位为列。
然后再循环此List,分别调用置零方法即可。
我的代码:
- public void setZeroes(int[][] matrix) {
- if (matrix.length == 0 || matrix[0].length == 0)
- return;
- List<Integer[]> list = new ArrayList<Integer[]>();
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[0].length; j++) {
- if (matrix[i][j] == 0) {
- list.add(new Integer[]{i,j});
- }
- }
- }
- for (Integer[] x : list) {
- setZero(matrix, x[0], x[1]);
- }
- }
- public void setZero(int[][] matrix, int i, int j) {
- for (int n = 0; n < matrix.length; n++) {
- matrix[n][j] = 0;
- }
- for (int m = 0; m < matrix[0].length; m++) {
- matrix[i][m] = 0;
- }
- }
我的复杂度:O(m*n)+ O((m+n)*x) x为矩阵中0的个数
编程过程中的问题:
1、无
(代码中的Integer[]可以使用int[]替换)
答案代码:
- public void setZeroes(int[][] matrix) {
- if (matrix.length == 0 || matrix[0].length == 0)
- return;
- boolean row = false,col = false;
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[0].length; j++) {
- if (matrix[i][j] == 0) {
- if (i == 0) row = true;
- if (j == 0) col = true;
- matrix[i][0] = 0;
- matrix[0][j] = 0;
- }
- }
- }
- for (int i = 1; i < matrix.length; i++) { // 注意此处应该是从1开始,因为第【0,0】如果为0也进行判断的话就会把第0列(标志列)全部设置为0,则接下来整个矩阵都会为0
- if (matrix[i][0] == 0) {
- for (int j = 0; j < matrix[0].length; j++) {
- matrix[i][j] = 0;
- }
- }
- }
- for (int j = 1; j < matrix[0].length; j++) { //
- if (matrix[0][j] == 0) {
- for (int i = 0; i < matrix.length; i++) {
- matrix[i][j] = 0;
- }
- }
- }
- if (row) {
- for (int j = 0; j < matrix[0].length; j++) {
- matrix[0][j] = 0;
- }
- }
- if (col) {
- for (int i = 0; i < matrix.length; i++) {
- matrix[i][0] = 0;
- }
- }
- }
答案复杂度:O(m*n)
答案思路:利用第0行和第0列作为“标志位”,并设置两个boolean变量记录“标志位”是否需要置0,这种方法相对于我的方法在最后置0的时候避免了重复置0的动作,原矩阵再多的0,最也只需要O(m*n)次置0
LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)的更多相关文章
- 【LeetCode每天一题】Set Matrix Zeroes(设置0矩阵)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...
- [Leetcode] 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. click ...
- Leetcode73. Set Matrix Zeroes矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输 ...
- 073 Set Matrix Zeroes 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将这个元素所在的行和列都置零.你有没有使用额外的空间?使用 O(mn) 的空间不是一个好的解决方案.使用 O(m + n) 的空间有所改善,但仍不 ...
- LeetCode第[18]题(Java):4Sum 标签:Array
题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...
- LeetCode第[1]题(Java):Two Sum 标签:Array
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2
题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...
- LeetCode第[1]题(Java):Two Sum (俩数和为目标数的下标)——EASY
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- LeetCode第[78]题(Java):Subsets(求子集)扩展——第[90]题:Subsets 2
题目:矩阵置0 难度:Easy 题目内容: Given a set of distinct integers, nums, return all possible subsets (the pow ...
随机推荐
- openssl生成证书server.key server.crt
Key是私用秘钥,通常是RSA算法 Csr是证书请求文件,用于申请证书.在制作csr文件时,必须使用自己的私钥来签署申,还可以设定一个密钥. crt是CA认证后的证书文,签署人用自己的key给你签署凭 ...
- Linux which命令
which常用与查看并显示指定命令的绝对路径,使用which命令,还可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令. 1.用法 which [命令] 2.实例 1)查看 ls 命令的绝 ...
- vim 设置字体和解决乱码
在 C:\Program Files (x86)\Vim 目录中的 _vimrc 文件中加入下面两行 set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bo ...
- Mysql数据库常用操作语句大全
零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...
- JavaWeb—Base64编码(转载)
基本概念 Base64这个术语最初是在“MIME内容传输编码规范”中提出的.Base64不是一种加密算法,虽然编码后的字符串看起来有点加密的赶脚.它实际上是一种“二进制到文本”的编码方法,它能够将给定 ...
- PHPcms v9 get标签sql 语句limit无效问题的解决方法
get标签非常好用,自定义模型后get几乎变成万能的了.但是PHPCMS升级到V9后,把2008的很多功能都去掉了,比如get标签中,在后面自动添加了一个LIMIT 0,20,这样你即使写了num=' ...
- Linux:Centos7升级内核(转)
更新前,内核版本为: uname -r 3.10.0-327.10.1.el7.x86_64 升级的方法: 1.导入key rpm --import https://www.elrepo.org/RP ...
- std::bind
参考资料 • cplusplus.com:http://www.cplusplus.com/reference/functional/bind/ • cppreference.com:http://e ...
- selenium 模块
介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如 ...
- python的最大递归层数
def foo(n): print(n) n += 1 foo(n) if __name__ == '__main__': foo(1) 打印出998,然后报错 RecursionError: max ...