首页 > 编程语言 >LeetCode_Array_73. Set Matrix Zeroes (C++)

LeetCode_Array_73. Set Matrix Zeroes (C++)

时间:2022-10-27 16:06:39浏览次数:51  
标签:Zeroes colTag Set Matrix int ++ 第一行 遍历 matrix


目录

​1,题目描述​

​2,思路​

​3,代码【C++】​

​4,测试效果​


1,题目描述

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.

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]
]

Follow up:

    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?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

2,思路

参考了LeetCode的官方题解,核心思想是:将第一行/列作为标记,遍历矩阵内元素(除了第一行/列),若某一元素值为0,则修改其在第一行/列对应位置的值为0,根据此标记对矩阵元素进行赋值;

具体算法:

  1. 设rowTag和colTag来标记原始矩阵中的第一行/列是否含0(因为后面做标记时,可能会弄混第一行/列原来是否含0),并根据矩阵元素赋予相应的值;
  2. 第一次遍历,对矩阵元素进行遍历(从左向右,从上到下),若matrix[i][j] == 0,则matrix[i][0] = 0,matrix[0][j] = 0;
  3. 第二次遍历,从matrix[1][1]开始,根据标记重置元素(除第一行/列);
  4. 根据rewTag和colTag,处理第一行/列;

 

3,代码【C++】

class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
bool rowTag = false; //在第一行原始数据中是否含0
bool colTag = false; //在第一列原始数据中是否含0

for(int i = 0 ; i < n ; i++){
if(matrix[0][i] == 0) rowTag = true;
}
for(int i = 0 ; i < m ; i++){
if(matrix[i][0] == 0) colTag = true;
}

//第一次遍历 在第一行/列做标记
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
if(matrix[i][j] == 0){
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}

//第二次遍历 根据标记重置矩阵元素(除去第一行/列)
for(int i = 1 ; i < m ; i++){
for(int j = 1 ; j < n ; j++){
if(matrix[i][0] == 0 || matrix[0][j] == 0){
matrix[i][j] = 0;
}
}
}

//处理第一行/列
if(rowTag) {
for(int i = 0 ; i < n ; i++) matrix[0][i] = 0;
}
if(colTag) {
for(int i = 0 ; i < m ; i++) matrix[i][0] = 0;
}
}
};

4,测试效果

经历过上次的测试后,emmm,仅供参考吧,hhh

LeetCode_Array_73. Set Matrix Zeroes (C++)_原始数据

标签:Zeroes,colTag,Set,Matrix,int,++,第一行,遍历,matrix
From: https://blog.51cto.com/u_15849465/5801372

相关文章

  • PAT_甲级_1022 Digital Library (30分) (C++)【map+set+STL】
    目录​​1,题目描述​​​​题目大意​​​​输入​​​​输出​​​​2,思路​​​​数据结构​​​​注意​​​​3,代码​​1,题目描述 SampleInput:31111111TheTestingB......
  • setInterval setTimeout区别
    区别:setTimeout只运行一次,也就是说设定的时间到后就触发运行指定代码,运行完后即结束;而setinterval是一直循环运行下去,即每到设定时间间隔就触发指定代码,要想停止,需要使用cl......
  • opencv-contrib-python的安装:Set OPENCV_ENABLE_NONFREE CMake option and rebuild th
    问题描述前往本页,可查看opencv-python和opencv-contrib-python的区别。​​https://docs.opencv.org/master/​​比如,SIFT就需要用到opencv-contrib-python包中的cv2.xfeat......
  • mysqloffset函数
    mysql中的limit用法有哪些(推荐)[offset,]1.m代表从m+1条记录行开始检索,n代表取出n条数据。(m可设为0)如:SELECT表示:从第7条记录行开始算,取出5条数据2.值得注意的是,n可以被设......
  • offset新探索:双管齐下,加速大数据量查询
    摘要:随着offset的增加,查询的时长也会越来越长。当offset达到百万级别的时候查询时长通常是业务所不能容忍的。本文分享自华为云社区《offset新探索:双管齐下,加速大数据量查......
  • vue3-setup 的参数
    setup(props,context){}第一个参数:    props,是一个对象,包含父组件传递给子组件的所有数据。在子组件中使用props进行接收,包含配置声明并传入的所有的属性的......
  • DFS(图的深搜)--判断图是否构成环以及对set利用迭代器插值插入set的方法
    题目描述以边关系表示客户间的转账行为,若客户1向2转账,就认为存在1指向2的边。假设从某个客户1出发,沿着其任意转账关系边查找,若最终均可以到达终止客户(不存在帐务转出的客户......
  • 解决response.setHeader设置下载文件名无效的问题
    response.setHeader设置下载文件名无效response.setContentType("application/octet-stream");response.setHeader("Content-Disposition","attachment;filename=down.......
  • bitset容器找出0~n-1中重复的那个数字
    题目描述一组无序的自然数集合,由0,1,2......,n的数字和一个的数字X(X>=0&&X<=n)组成,请从集合中找出这个重复数字X。输入描述:空格分割的自然数集合输出描述:重复数字......
  • 转 - 使用limit offset 分页时,为什么越往后翻越慢?如何解决?
    当一个数据库表过于庞大,LIMIToffset,length中的offset值过大,则SQL查询语句会非常缓慢,你需增加orderby,并且orderby字段需要建立索引。16、使用limitoffset分页时,为什......