【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) 文件的凝视