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

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

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

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.

提示的算法很容易就想到。constant space的算法, 自己一开始总是想找出一种操作,然后遍历一遍解决。

其实最简单的方法就是直接在matrix上记录行、列是否0的信息。这里的技巧在于,选择了在第一行和第一列上记录,用0值表示这一行(或列)为0。因为只要这一行(或列)为0,最终这个值也是要设为0的,不会影响最终的结果。如果在第一行的元素在该列没有0,那么他是否要设为0就取决于第一行是否有0. 第一列的元素同理。

1 class Solution { 2 public: 3     void setZeroes(vector
> &matrix) { 4 int row = matrix.size(); 5 if (row == 0) return; 6 int col = matrix[0].size(); 7 if (col == 0) return; 8 9 bool firstRowZero = false, firstColZero = false;10 for (int i = 0; i < col; ++i) {11 if (matrix[0][i] == 0) {12 firstRowZero = true;13 break;14 }15 }16 17 for (int i = 0; i < row; ++i) {18 if (matrix[i][0] == 0) {19 firstColZero = true;20 break;21 }22 }23 24 for (int i = 1; i < row; ++i) {25 for (int j = 1; j < col; ++j) {26 if (matrix[i][j] == 0) {27 matrix[i][0] = 0;28 matrix[0][j] = 0;29 }30 }31 }32 33 for (int i = 1; i < row; ++i) {34 for (int j = 1; j < col; ++j) {35 if (matrix[i][0] == 0 || matrix[0][j] == 0) {36 matrix[i][j] = 0;37 }38 }39 }40 41 if (firstRowZero) {42 for (int i = 0; i < col; ++i) {43 matrix[0][i] = 0;44 }45 }46 47 if (firstColZero) {48 for (int i = 0; i < row; ++i) {49 matrix[i][0] = 0;50 }51 }52 }53 };

 

转载于:https://www.cnblogs.com/linyx/p/3654180.html

你可能感兴趣的文章
视图层
查看>>
Django跨域解决方法
查看>>
冒泡排序
查看>>
Mysql字段合并
查看>>
五笔反查工具
查看>>
python 类的继承
查看>>
python 爬取<a>标签内href的方法及遇到的问题
查看>>
.Net 环境下比较各种数据库插入操作的性能
查看>>
CSS: rem
查看>>
驰骋工作流引擎-流程数据md5加密
查看>>
javascript基础学习(一)
查看>>
MSSQL排序规则冲突
查看>>
synchronize模块
查看>>
批量修改文件名(Python)
查看>>
枚举排列
查看>>
MapReduce的手机流量统计的案例
查看>>
zabbix_get 命令介绍
查看>>
jQuery属性操作之类样式操作
查看>>
技术人员的发展之路
查看>>
简单易懂,原码,补码,反码
查看>>