欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【leetcode】Set Matrix Zeroes(middle)

发布时间:2024/4/17 编程问答 72 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【leetcode】Set Matrix Zeroes(middle) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

 

思路:不能用额外空间,就用矩阵的第一行和第一列来标记这一行或这一列是否需要置0. 用两个bool量记录第一行和第一列是否需要置0

大神的代码和我的代码都是这个思路,但是我在画0的时候是行列分开处理的,大神的代码是一起处理的

void setZeroes(vector<vector<int> > &matrix) {if(matrix.empty())return;bool iszero1 = false; //第一行是否全0bool iszero2 = false; //第一列是否全0//第一行 第一列单独拿出来做标记for(int j = 0; j < matrix[0].size(); j++){if(matrix[0][j] == 0) iszero1 = true;}for(int i = 0; i < matrix.size(); i++){if(matrix[i][0] == 0) iszero2 = true;}for(int i = 1; i < matrix.size(); i++){for(int j = 1; j < matrix[0].size(); j++){//如果数值为0,把对应那一行的第一个 和 那一列的第一个数字置为0if(matrix[i][j] == 0){matrix[0][j] = 0;matrix[i][0] = 0;}}}//分行列处理//先不考虑[0][0] 位置 如果某一行第一个为0,整行置0for(int i = 1; i < matrix.size(); i++){if(matrix[i][0] == 0){for(int j = 1; j < matrix[0].size(); j++){matrix[i][j] = 0;}}}for(int j = 1; j < matrix[0].size(); j++){if(matrix[0][j] == 0){for(int i = 1; i < matrix.size(); i++){matrix[i][j] = 0;}}}if(iszero1){for(int j = 0; j < matrix[0].size(); j++){matrix[0][j] = 0;}}if(iszero2){for(int i = 0; i < matrix.size(); i++){matrix[i][0] = 0;}}return;}

 

 

大神的代码:

public void setZeroes(int[][] matrix) {int rownum = matrix.length;if (rownum == 0) return;int colnum = matrix[0].length;if (colnum == 0) return;boolean hasZeroFirstRow = false, hasZeroFirstColumn = false;// Does first row have zero?for (int j = 0; j < colnum; ++j) {if (matrix[0][j] == 0) {hasZeroFirstRow = true;break;}}// Does first column have zero?for (int i = 0; i < rownum; ++i) {if (matrix[i][0] == 0) {hasZeroFirstColumn = true;break;}}// find zeroes and store the info in first row and columnfor (int i = 1; i < matrix.length; ++i) {for (int j = 1; j < matrix[0].length; ++j) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// set zeroes except the first row and column 一起处理的for (int i = 1; i < matrix.length; ++i) {for (int j = 1; j < matrix[0].length; ++j) {if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;}}// set zeroes for first row and column if neededif (hasZeroFirstRow) {for (int j = 0; j < colnum; ++j) {matrix[0][j] = 0;}}if (hasZeroFirstColumn) {for (int i = 0; i < rownum; ++i) {matrix[i][0] = 0;}} }

 

转载于:https://www.cnblogs.com/dplearning/p/4344825.html

总结

以上是生活随笔为你收集整理的【leetcode】Set Matrix Zeroes(middle)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。