博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Set Matrix Zeroes
阅读量:6671 次
发布时间:2019-06-25

本文共 3902 字,大约阅读时间需要 13 分钟。

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?

 

思路:主要考察的是空间复杂度,

方法一:用rowHasZero记录这一行是否有0 存在,用colHaszero记录这一列是否有0存在。后面处理rowHasZero和colHaszero。空间复杂度O(m+n)

class Solution {    public:        void setZeroes(vector
> &matrix) { size_t row = matrix.size(); if(row == 0) return; size_t col = matrix[0].size(); vector
rowHasZero(row, false); vector
colHasZero(col, false); for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(matrix[i][j] == 0) { rowHasZero[i] = true; colHasZero[j] = true; } } } for(int i = 0; i < row; i++) { if(rowHasZero[i]) { for(int j = 0; j < col; j++) { matrix[i][j] = 0; } } } for(int i = 0; i < col; i++) { if(colHasZero[i]) { for(int j = 0; j < row; j++) { matrix[j][i] = 0; } } } }};

 方法二:空间复杂度O(1),用第0行记录列是否有0,用第0列记录行是否有0,先判断行0和列0是否有0,然后处理矩阵,若matrix[i][j]为0,设置matrix[i][0] = 0; matrix[0][j] = 0;,然后根据matrix[i][0]和matrix[0][j]来设置设置相应的行、列为0,最后处理行0,列0.

class Solution {    public:        void setZeroes(vector
> &matrix) { size_t row = matrix.size(); if(row == 0) return; size_t col = matrix[0].size(); bool rowZeroHasZero = false; bool colZeroHasZero = false; for(int i = 0; i < col; i++) { if(matrix[0][i] == 0) { rowZeroHasZero = true; break; } } for(int i = 0; i < row; i++) { if(matrix[i][0] == 0) { colZeroHasZero = true; break; } } //cout << rowZeroHasZero << endl; //cout << colZeroHasZero << endl; for(int i = 1; i < row; i++) { for(int j = 1; j < col; j++) { if(matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; } } } for(int i = 1; i < row; i++) { if(matrix[i][0] == 0) { for(int j = 0; j < col; j++) { matrix[i][j] = 0; } } } for(int i = 1; i < col; i++) { if(matrix[0][i] == 0) { for(int j = 0; j < row; j++) { matrix[j][i] = 0; } } } //handle the first row & first col if(rowZeroHasZero) { for(int j = 0; j < col; j++) { matrix[0][j] = 0; } } if(colZeroHasZero) { for(int i = 0; i < row; i++) { matrix[i][0] = 0; } } }};

 

转载地址:http://aulxo.baihongyu.com/

你可能感兴趣的文章
给 Android 初学者的 Gradle 知识普及
查看>>
分模块开发创建Action子模块——(九)
查看>>
基于Nginx实现一个自己的HTTP模块
查看>>
LeetCode(34)-Palindrome Number
查看>>
阅读《Android 从入门到精通》(24)——切换图片
查看>>
SimpleDateFormat线程不安全及解决的方法
查看>>
Unity---------Mesh理解
查看>>
hdu 1728 逃离迷宫 bfs记转向
查看>>
一分钟学会 ConstraintLayout 之从属性角度理解布局
查看>>
线程 Timer TimerTask 计时器 定时任务 MD
查看>>
[js高手之路]原型式继承与寄生式继承
查看>>
2017“编程之美”终章:AI之战勇者为王
查看>>
[js高手之路]HTML标签解释成DOM节点
查看>>
MBR分区操作-增加、扩展、删除
查看>>
JAVA回调机制(CallBack)详解
查看>>
Linux误删文件后恢复数据
查看>>
Vue学习手札
查看>>
IdentityServer4 通过 AccessToken 获取 UserClaims
查看>>
IIS访问站点,出现connection refused
查看>>
C语言程序内存布局
查看>>