【leetcode】Set Matrix Zeroes(middle)
生活随笔
收集整理的这篇文章主要介绍了
【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)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 在基于Jetty Fast CGI Pr
- 下一篇: BibTex (.bib) 文件的凝视