leetcode73 矩阵置零

题目描述

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

python完整代码 

class Solution:def setZeroes(self, matrix):rows = len(matrix)  # 获取矩阵的行数cols = len(matrix[0])  # 获取矩阵的列数# 定义两个集合用于存储应该置零的行号和列号zero_rows = set()zero_cols = set()# 遍历整个矩阵,记录0元素所在的行和列for i in range(rows):for j in range(cols):if matrix[i][j] == 0:zero_rows.add(i)zero_cols.add(j)# 将需要置零的行和列的元素置为0for i in range(rows):for j in range(cols):if i in zero_rows or j in zero_cols:  # 如果i和j在元素0所在的行或列matrix[i][j] = 0if __name__ == "__main__":solution = Solution()# 测试用例1:矩阵中有0元素matrix1 = [[1, 1, 1],[1, 0, 1],[1, 1, 1]]print("原始矩阵1:")for row in matrix1:print(row)solution.setZeroes(matrix1)print("\n置零后的矩阵1:")for row in matrix1:print(row)# 测试用例2:矩阵中没有0元素matrix2 = [[0, 1, 2, 0],[3, 4, 5, 2],[1, 3, 1, 5]]print("\n原始矩阵2:")for row in matrix2:print(row)solution.setZeroes(matrix2)print("\n置零后的矩阵2:")for row in matrix2:print(row)# 测试用例3:矩阵中全是0元素matrix3 = [[0, 0, 0],[0, 0, 0],[0, 0, 0]]print("\n原始矩阵3:")for row in matrix3:print(row)solution.setZeroes(matrix3)print("\n置零后的矩阵3:")for row in matrix3:print(row)
class Solution:def setZeroes(self, matrix):rows = len(matrix)  # 获取矩阵的行数cols = len(matrix[0])  # 获取矩阵的列数# 定义两个标志位,用于标记第一行和第一列是否需要置零first_row_zero = Falsefirst_col_zero = False# 检查第一行是否有0元素for j in range(cols):if matrix[0][j] == 0:first_row_zero = Truebreak# 检查第一列是否有0元素for i in range(rows):if matrix[i][0] == 0:first_col_zero = Truebreak# 遍历除第一行和第一列以外的元素,若为0,则将对应的第一行和第一列置为0for i in range(1, rows):for j in range(1, cols):if matrix[i][j] == 0:matrix[i][0] = 0matrix[0][j] = 0# 根据第一行和第一列的标志位,将对应的行和列置为0for i in range(1, rows):for j in range(1, cols):if matrix[i][0] == 0 or matrix[0][j] == 0:matrix[i][j] = 0# 如果第一行需要置零,则将第一行置零if first_row_zero:for j in range(cols):matrix[0][j] = 0# 如果第一列需要置零,则将第一列置零if first_col_zero:for i in range(rows):matrix[i][0] = 0if __name__ == "__main__":solution = Solution()# 测试用例1:矩阵中有0元素matrix1 = [[1, 1, 1],[1, 0, 1],[1, 1, 1]]print("原始矩阵1:")for row in matrix1:print(row)solution.setZeroes(matrix1)print("\n置零后的矩阵1:")for row in matrix1:print(row)# 测试用例2:矩阵中没有0元素matrix2 = [[0, 1, 2, 0],[3, 4, 5, 2],[1, 3, 1, 5]]print("\n原始矩阵2:")for row in matrix2:print(row)solution.setZeroes(matrix2)print("\n置零后的矩阵2:")for row in matrix2:print(row)# 测试用例3:矩阵中全是0元素matrix3 = [[0, 0, 0],[0, 0, 0],[0, 0, 0]]print("\n原始矩阵3:")for row in matrix3:print(row)solution.setZeroes(matrix3)print("\n置零后的矩阵3:")for row in matrix3:print(row)

c++完整代码  

#include <iostream>
#include <vector>
#include <unordered_set>using namespace std;class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int rows = matrix.size(); // 获取矩阵的行数int cols = matrix[0].size(); // 获取矩阵的列数// 定义两个集合用于存储应该置零的行号和列号unordered_set<int> zero_rows;unordered_set<int> zero_cols;// 遍历整个矩阵,记录0元素所在的行和列for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {if (matrix[i][j] == 0) {zero_rows.insert(i);zero_cols.insert(j);}}}// 将需要置零的行和列的元素置为0for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {if (zero_rows.count(i) || zero_cols.count(j)) {  // 如果i和j在元素0所在的行或列matrix[i][j] = 0;}}}}
};int main() {Solution solution;// 测试用例1:矩阵中有0元素vector<vector<int>> matrix1 = {{1, 1, 1},{1, 0, 1},{1, 1, 1}};cout << "matrix 1:" << endl;for (auto& row : matrix1) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix1);cout << "after matrix 1:" << endl;for (auto& row : matrix1) {for (int val : row) {cout << val << " ";}cout << endl;}vector<vector<int>> matrix2 = {{0, 1, 2, 0},{3, 4, 5, 2},{1, 3, 1, 5}};cout << "matrix 2:" << endl;for (auto& row : matrix2) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix2);cout << "after matrix 2:" << endl;for (auto& row : matrix2) {for (int val : row) {cout << val << " ";}cout << endl;}vector<vector<int>> matrix3 = {{0, 1, 0},{1, 0, 1},{0, 1, 0}};cout << "matrix 3:" << endl;for (auto& row : matrix3) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix3);cout << "after matrix 3:" << endl;for (auto& row : matrix3) {for (int val : row) {cout << val << " ";}cout << endl;}return 0;
}
#include <iostream>
#include <vector>using namespace std;class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {int rows = matrix.size(); // 获取矩阵的行数int cols = matrix[0].size(); // 获取矩阵的列数// 定义两个标志位,用于标记第一行和第一列是否需要置零bool first_row_zero = false;bool first_col_zero = false;// 检查第一行是否有0元素for (int j = 0; j < cols; ++j) {if (matrix[0][j] == 0) {first_row_zero = true;break;}}// 检查第一列是否有0元素for (int i = 0; i < rows; ++i) {if (matrix[i][0] == 0) {first_col_zero = true;break;}}// 遍历除第一行和第一列以外的元素,若为0,则将对应的第一行和第一列置为0for (int i = 1; i < rows; ++i) {for (int j = 1; j < cols; ++j) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// 根据第一行和第一列的标志位,将对应的行和列置为0for (int i = 1; i < rows; ++i) {for (int j = 1; j < cols; ++j) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// 如果第一行需要置零,则将第一行置零if (first_row_zero) {for (int j = 0; j < cols; ++j) {matrix[0][j] = 0;}}// 如果第一列需要置零,则将第一列置零if (first_col_zero) {for (int i = 0; i < rows; ++i) {matrix[i][0] = 0;}}
}
};int main() {Solution solution;// 测试用例vector<vector<int>> matrix1 = {{1, 1, 1},{1, 0, 1},{1, 1, 1}
};cout << "matrix 1:" << endl;for (auto& row : matrix1) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix1);cout << "after matrix 1:" << endl;for (auto& row : matrix1) {for (int val : row) {cout << val << " ";}cout << endl;}vector<vector<int>> matrix2 = {{0, 1, 2, 0},{3, 4, 5, 2},{1, 3, 1, 5}
};cout << "matrix 2:" << endl;for (auto& row : matrix2) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix2);cout << "after matrix 2:" << endl;for (auto& row : matrix2) {for (int val : row) {cout << val << " ";}cout << endl;}vector<vector<int>> matrix3 = {{0, 1, 0},{1, 0, 1},{0, 1, 0}
};cout << "matrix 3:" << endl;for (auto& row : matrix3) {for (int val : row) {cout << val << " ";}cout << endl;}solution.setZeroes(matrix3);cout << "after matrix 3:" << endl;for (auto& row : matrix3) {for (int val : row) {cout << val << " ";}cout << endl;}return 0;
}

Java完整代码   

import java.util.HashSet;
import java.util.Set;
public class setZeroes {public void setZeroes1(int[][] matrix) {int rows = matrix.length; // 获取矩阵的行数int cols = matrix[0].length; // 获取矩阵的列数// 定义两个集合用于存储应该置零的行号和列号Set<Integer> zeroRows = new HashSet<>();Set<Integer> zeroCols = new HashSet<>();// 遍历整个矩阵,记录0元素所在的行和列for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {if (matrix[i][j] == 0) {zeroRows.add(i);zeroCols.add(j);}}}// 将需要置零的行和列的元素置为0for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {if (zeroRows.contains(i) || zeroCols.contains(j)) {  // 如果i和j在元素0所在的行或列matrix[i][j] = 0;}}}}public static void main(String[] args) {setZeroes setZeroes1 = new setZeroes();// 测试用例1:矩阵中有0元素int[][] matrix1 = {{1, 1, 1},{1, 0, 1},{1, 1, 1}};System.out.println("原始矩阵1:");for (int[] row : matrix1) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes1.setZeroes1(matrix1);System.out.println("\n置零后的矩阵1:");for (int[] row : matrix1) {for (int val : row) {System.out.print(val + " ");}System.out.println();}int[][] matrix2 = {{0, 1, 2, 0},{3, 4, 5, 2},{1, 3, 1, 5}};System.out.println("原始矩阵2:");for (int[] row : matrix2) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes1.setZeroes1(matrix2);System.out.println("\n置零后的矩阵2:");for (int[] row : matrix2) {for (int val : row) {System.out.print(val + " ");}System.out.println();}int[][] matrix3 = {{0, 1, 0},{1, 0, 1},{0, 1, 0}};System.out.println("原始矩阵3:");for (int[] row : matrix3) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes1.setZeroes1(matrix3);System.out.println("\n置零后的矩阵3:");for (int[] row : matrix3) {for (int val : row) {System.out.print(val + " ");}System.out.println();}}
}
import java.util.HashSet;
import java.util.Set;public class setZeroes2 {public void setZeroes(int[][] matrix) {int rows = matrix.length;  // 获取矩阵的行数int cols = matrix[0].length;  // 获取矩阵的列数// 定义两个标志位,用于标记第一行和第一列是否需要置零boolean firstRowZero = false;boolean firstColZero = false;// 检查第一行是否有0元素for (int j = 0; j < cols; j++) {if (matrix[0][j] == 0) {firstRowZero = true;break;}}// 检查第一列是否有0元素for (int i = 0; i < rows; i++) {if (matrix[i][0] == 0) {firstColZero = true;break;}}// 遍历除第一行和第一列以外的元素,若为0,则将对应的第一行和第一列置为0for (int i = 1; i < rows; i++) {for (int j = 1; j < cols; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// 根据第一行和第一列的标志位,将对应的行和列置为0for (int i = 1; i < rows; i++) {for (int j = 1; j < cols; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// 如果第一行需要置零,则将第一行置零if (firstRowZero) {for (int j = 0; j < cols; j++) {matrix[0][j] = 0;}}// 如果第一列需要置零,则将第一列置零if (firstColZero) {for (int i = 0; i < rows; i++) {matrix[i][0] = 0;}}}public static void main(String[] args) {setZeroes2 setZeroes = new setZeroes2();// 测试用例1:矩阵中有0元素int[][] matrix1 = {{1, 1, 1},{1, 0, 1},{1, 1, 1}};System.out.println("原始矩阵1:");for (int[] row : matrix1) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes.setZeroes(matrix1);System.out.println("\n置零后的矩阵1:");for (int[] row : matrix1) {for (int val : row) {System.out.print(val + " ");}System.out.println();}int[][] matrix2 = {{0, 1, 2, 0},{3, 4, 5, 2},{1, 3, 1, 5}};System.out.println("原始矩阵2:");for (int[] row : matrix2) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes.setZeroes(matrix2);System.out.println("\n置零后的矩阵2:");for (int[] row : matrix2) {for (int val : row) {System.out.print(val + " ");}System.out.println();}int[][] matrix3 = {{0, 1, 0},{1, 0, 1},{0, 1, 0}};System.out.println("原始矩阵3:");for (int[] row : matrix3) {for (int val : row) {System.out.print(val + " ");}System.out.println();}setZeroes.setZeroes(matrix3);System.out.println("\n置零后的矩阵3:");for (int[] row : matrix3) {for (int val : row) {System.out.print(val + " ");}System.out.println();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go】go mod初始化

遇到问题 创建go项目时使用 go mod init 命令提示如下错误&#xff1a; go: cannot determine module path for source directory /Users/easton/go/basic-go (outside GOPATH, module path must be specified) 解决方案一 这是因为go mod init 初始化项目时&#xff0c;需要…

【数据结构】单链表(一)

上一篇【数据结构】顺序表-CSDN博客 我们了解了顺序表&#xff0c;但是呢顺序表涉及到了一些问题&#xff0c;比如&#xff0c;中间/头部的插入/删除&#xff0c;时间复杂度为O(N);增容申请空间、拷贝、释放旧空间会有不小的消耗&#xff1b;增容所浪费的空间... 我们如何去解…

蓝桥杯刷题 二分-[99]分巧克力(C++)

题目描述 儿童节那天有 K 位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 切出的巧克力需要…

java数据结构与算法刷题-----LeetCode210. 课程表 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 深度优先遍历但不进行逆拓扑排序&#xff08;不用栈&#xff09;…

leetcode 343. 整数拆分

题目 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解释: 1…

数据结构与算法 — 贪心算法

数据结构与算法 数据结构与算法是计算机科学中的两个核心概念&#xff0c;它们在软件开发和问题解决中起着至关重要的作用。 数据结构 数据结构是计算机中存储、组织和管理数据的方式&#xff0c;它能够帮助我们高效地访问和修改数据。不同的数据结构适用于不同类型的应用场…

记一次IP访问MySQL失败多次被自动锁定导致无法连接问题,解决方法只需一条SQL。

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 前言 今天下午还在带着耳机摸鱼&#xff…

获取当前的年、月、日、时、分、秒,并将这些信息用作保存 Excel 文件的前缀

要获取当前的年、月、日、时、分、秒&#xff0c;并将这些信息用作保存 Excel 文件的前缀&#xff0c;你可以使用 Python 的 datetime 模块来获取当前时间&#xff0c;并格式化时间字符串&#xff0c;然后使用 pandas 库将数据保存为 Excel 文件。示例代码&#xff1a; from d…

Netty的基本架构与组件

Netty实战精髓 前言 Netty的组成部分 1、Channel 2、Callback 3、Future ChannelFuture 提供多个附件方法来允许一个或者多个 ChannelFutureListener 实例&#xff0c;这个回调方法 operationComplete() 会在操作完成时调用。 4、Event和Handler 5、EventLOOP Netty 通过触发…

Objective-C学习笔记(block,协议)4.10

1.block&#xff1a;是一个数据类型&#xff0c;存储一段代码&#xff0c;代码可以有参数有返回值。 2.声明block&#xff1a; 返回值类型 (^block变量名称)(参数列表); int (^myblock) (int num1,int num2); 代码段格式&#xff1a;^返回值类型(参数列表){ 代码段 }; int (^m…

如何在极狐GitLab 启用依赖代理功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

UG NX二次开发(C#)-使用UG NX的开发模板创建项目失败的原因和解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、可能的原因与解决方案2.1 Visual studio安装不完整2.2 解决方案2.2.1 对于 .net 桌面开发2.2.2 使用C++的桌面开发2.2.3 通用Windows平台开发2.2.4 visual studio扩展开发2.2.5 单个组件…

C语言 获取系统时间

获取系统时间的函数 #define _TIMEBUFLEN (40) // 获取日志缓冲需要的大小 void GetSysTime(char* pTimeBuf, u32 dwSize) {if (pTimeBuf NULL){return;} #if defined(_MSC_VER)SYSTEMTIME sys { 0 };GetLocalTime(&sys);sprintf_s(pTimeBuf, dwSize, "%4d-%02d-%0…

SSH穿透ECS访问内网RDS数据库

处于安全考虑&#xff0c;RDS一般只会允许指定的IP进行访问&#xff0c;而我们开发环境的IP往往是动态的&#xff0c;每次IP变动都需要去修改RDS的白名单&#xff0c;为我们的工作带来很大的不便。 那么如何去解决这个问题&#xff1f; 假如我们有一台ESC服务器&#xff0c;E…

STC89C52学习笔记(八)

STC89C52学习笔记&#xff08;八&#xff09; 综述&#xff1a;本文讲述了LED点阵屏以及如何进行数据串行输入&#xff0c;并行输出。 一、LED点阵屏 1.介绍 LED点阵屏由多个LED组成&#xff0c;以矩阵形式排列&#xff08;类似于矩阵键盘&#xff09;&#xff0c;像素一般…

Objective-C学习笔记(@property,id,instancetype)4.9

1.增强property&#xff1a;自动生成getter和setter方法的声明和实现。 原理&#xff1a;①自动声明私有属性②自动生成getter和setter方法的声明和实现。 property 数据类型 变量名 注意变量名要去掉下划线&#xff0c;如果同时重写getter和setter那么不回自动声明私有属性。…

【iOS ARKit】App 中嵌入 AR Quick Look

AR Quick Look 功能强大&#xff0c;但在应用中嵌入并使用它实现 AR体验却非常简单&#xff0c;如其他所有QuickLook使用一样&#xff0c;简单到只需要提供一个文件名就可以达到目标。 AR Quick Look 支持.usdz 和.reality 两种格式文件&#xff0c;如果在 Xcode 工程中引入了 …

CSS滚动条样式修改

前言 目前我们可以通过 CSS伪类 来实现滚动条的样式修改&#xff0c;以下为修改滚动条样式用到的CSS伪类&#xff1a; ::-webkit-scrollbar — 整个滚动条 ::-webkit-scrollbar-button — 滚动条上的按钮 (上下箭头) ::-webkit-scrollbar-thumb — 滚动条上的滚动滑块 ::-web…

安卓逆向之-Xposed RPC

引言: 逆向为最终的协议,或者爬虫的作用。 有几种方式,比如直接能力强,搞成协议。 现在好多加密解密都写入到so ,所以可以使用unidbg 一个可以模拟器so 执行的环境的开源项目。RPC 调用,又分为Frida, 还有今天讲的Xposed RPC。 原理: Xposed 可以hook ,然后可以直接…

了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步&#xff0c;显著提升了各种任务的完成度。然而&#xff0c;其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数&#xff0c;需要…