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.hqwc.cn/news/615665.html

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

相关文章

基于机器学习预测岗位薪资

本文根据某招聘网站抓取的岗位信息&#xff0c;来预测该岗位平均薪资。 数据预处理 数据示例如下&#xff1a; 因为本文重点介绍如何实现预测&#xff0c;因此对于数据的预处理部分讲解一下处理逻辑&#xff1a; 1、统一薪资的单位&#xff0c;要么统一为年薪&#xff08;万/…

【员工培训体系的建立】使用培训积分制:量化培训效果

该公园希望通过定期培训来帮助员工获取有效信息和先进技术成果&#xff0c;不断提高员工的综合素质&#xff0c;适应新形势的需要&#xff0c;并且管理者逐步认识到&#xff0c;不应把现代公园的人员培训所产生人力资本的再生产视为一种消费&#xff0c;而应视为一种投资&#…

Android 四大组件启动

service: startService启动过程分析 - Gityuan博客 | 袁辉辉的技术博客 在整个startService过程&#xff0c;从进程角度看服务启动过程 Process A进程&#xff1a;是指调用startService命令所在的进程&#xff0c;也就是启动服务的发起端进程&#xff0c;比如点击桌面App图标…

3.Godot节点编辑操作及类的继承关系

1. 节点的父子关系 在层级树中&#xff0c;对象 (节点) 呈树形显示&#xff0c;一个节点下面&#xff0c;也可以下挂子节点 1 添加两个对象 2 拖拽一个对象到另一个对象&#xff0c;成为子对象 (子节点) 3 移动父对象、旋转父对象&#xff0c;观察可以发现&#xff0c;当父对…

【操作系统专题】计算机系统概述

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.基本构成2.微处理器…

MYSQL原理学习篇简记(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小周同志&#xff0c;25届双非校招生Java选手&#xff0c;很高兴认识大家 &#x1f4d5;学习出处&#xff1a;本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇 &#x1f525;如果感觉博主的文章还不错的…

使用idea运行程序,发现控制台的中文出现乱码

修改UTF-8发现没有效果&#xff0c;寻找.idea文件夹的encodings.xml文件&#xff0c;将里面的UTF-8全部变成GBK.

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

Ubuntu 22上安装Anaconda3。下载、安装、验证详细教程

在Ubuntu 22上安装Anaconda3&#xff0c;你可以遵循以下步骤&#xff1a; 更新系统存储库&#xff1a; 打开终端并运行以下命令来更新系统存储库&#xff1a; sudo apt update安装curl包&#xff1a; 下载Anaconda安装脚本通常需要使用curl工具。如果系统中没有安装curl&#x…

基于单链表实现通讯管理系统!(有完整源码!)

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 文章专栏&#xff1a;C语言实战项目 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 1、前言 友友们&#xff0c;这篇文章是基于单链…

ARM单片机的GPIO口在控制不同LED、按键时的设置

个人备忘&#xff0c;不喜勿喷。 GPIO口在驱动共阴极、共阳极LED灯时需要不同的初始化设置 对于这一类的led灯&#xff1a; 最好选择推挽、上拉、高速输出&#xff0c;同时IO口初始化时需要拉高。 上面这种需要下拉输入&#xff1b; 上图这种需要上拉输入&#xff0c;这样才…

MySQL基础知识——MySQL事务

事务背景 什么是事务&#xff1f; 一组由一个或多个数据库操作组成的操作组&#xff0c;能够原子的执行&#xff0c;且事务间相互独立&#xff1b; 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 注&#xff1a;MyS…