日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0

發(fā)布時(shí)間:2024/4/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Set Matrix Zeroes

原題鏈接Set Matrix Zeroes


給定一個(gè)m × n矩陣,如果矩陣中某個(gè)元素是0,那么就將它所在的行,所在的列上的所有元素都變成0。要求空間復(fù)雜度在O(1),也就是說在原矩陣上就修改

在原矩陣上做修改無非兩種方法

一種是使用遞歸,即發(fā)現(xiàn)某個(gè)元素是0,就把對(duì)應(yīng)行對(duì)應(yīng)列的每個(gè)元素賦值為0,然后遞歸的以它所在這一行,這一列的每個(gè)元素為起點(diǎn),依次做同樣的事情

這種方法在遞歸的過程中極易出錯(cuò),而且對(duì)于很多邊界條件無法很好的控制

另外一種是先不著急對(duì)矩陣的元素進(jìn)行更改,只記錄哪幾行,哪幾列的元素應(yīng)該被賦值成0。不過需要在原矩陣上記錄,而不能使用額外的空間

這種方法唯一需要解決的就是如何記錄在原矩陣中。


綜上,可以看出使用第二種方法最為合適,但是,要怎么保存都有哪幾行,哪幾列的元素應(yīng)該被置成0呢。試想,在遍歷完矩陣后,矩陣的某些位置應(yīng)該是被改變的,這些被改變的位置標(biāo)記著對(duì)應(yīng)行,或者是對(duì)應(yīng)列的所有元素是否應(yīng)該被置成0。如果把行和列分開來記錄,那么可以說
應(yīng)該有一行的元素記錄對(duì)應(yīng)列是否被置為0,同時(shí)也應(yīng)該有一列元素記錄對(duì)應(yīng)行是否被置為1

那么,只需要將原矩陣中的某個(gè)行和某一列用來記錄就可以了,具體哪一行哪一列不固定,不過正常來說,選擇第0行記錄每一列是否應(yīng)該被置為0,選擇第0列記錄每一行是否應(yīng)該被置為0比較合適

那么,程序唯一需要做的就是遍歷一遍矩陣,如果某個(gè)元素值為0,就將第0行的對(duì)應(yīng)列置為0,同時(shí)也要將第0列的對(duì)應(yīng)行置為0。這樣,當(dāng)遍歷結(jié)束后,只需要再遍歷一遍第0行,把是0的位置的那一列都變?yōu)?,同時(shí)遍歷一遍第0列,把是0的位置的那一行都變?yōu)?.

但是,有個(gè)問題!

如果遍歷的時(shí)候碰巧第0行的某個(gè)元素的值為0,那么按照上面的做法,應(yīng)該是

將第0行的當(dāng)前列(還是這個(gè)元素所在位置)置為0。這一步驟沒什么問題
將第0列的當(dāng)前行(注意當(dāng)前行是0)置為0,也就是將第0行第0列這個(gè)位置置為0

第二步會(huì)出現(xiàn)什么問題?倘若第0行第0列的那個(gè)位置被置為0,那么再更改矩陣元素時(shí),第0行和第0列的所有元素將變?yōu)?,最終導(dǎo)致矩陣所有元素都變?yōu)?!

第0列的某個(gè)元素的值為0也是同理。

所以這種方法是不可取的,不過只是對(duì)于處理第0行和第0列的所有元素不可取,換句話說只是對(duì)第0行第0列的那個(gè)元素不可取(注意第0行和第0列與第0行第0列的區(qū)別)

那么程序無非要做的就是對(duì)上面問題單獨(dú)處理

只要是第0行的某個(gè)元素是0,那么就找個(gè)變量記錄第0行的所有元素應(yīng)該都被置為0
只要是第0列的某個(gè)元素是0,那么就找個(gè)變量記錄第0列的所有元素應(yīng)該都被置為0

當(dāng)然,對(duì)于第0行和第0列的置0操作都應(yīng)該被放在最后執(zhí)行,也就是放在將矩陣元素都大體改完之后執(zhí)行。不然,把第0行和第0列的所有元素都置為0了,那么如果再根據(jù)第0行和第0列判斷對(duì)應(yīng)列和對(duì)應(yīng)行是否應(yīng)該被置為0,結(jié)果只會(huì)另矩陣所有元素都變?yōu)?

另外,上述操作只是為了防止將第0行第0列的那個(gè)位置的元素置為0。

代碼如下

class Solution { public:void setZeroes(vector<vector<int>>& matrix) {if(matrix.empty() || matrix[0].empty())return;/* 記錄第0行的元素是否應(yīng)該被置為0 */bool oneRowZero = false;/* 記錄第0列的元素是否應(yīng)該被置為0 */bool oneColumnZero = false;for(int i = 0; i < matrix.size(); ++i){for(int j = 0; j < matrix[i].size(); ++j){if(matrix[i][j] == 0){/* 如果某個(gè)元素是0,就將第0行的對(duì)應(yīng)列,第0列的對(duì)應(yīng)行置為0 */matrix[i][0] = matrix[0][j] = 0;/* 如果是第0行的元素是0,那么就任務(wù)第0行應(yīng)該被置為0 */if(i == 0)oneRowZero = true;/* 同理第0列 */if(j == 0)oneColumnZero = true;} } } /* 遍歷矩陣第0列,如果第0列的某個(gè)元素是0,就將對(duì)應(yīng)行的元素置0 *//* 這里沒有考慮第0行第0列 */for(int i = 1; i < matrix.size(); ++i){if(matrix[i][0] == 0){for(int j = 1; j < matrix[i].size(); ++j)matrix[i][j] = 0;}}/* 同理,遍歷矩陣第0行,將對(duì)應(yīng)列元素置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;}}/* 設(shè)置第0行 */if(oneRowZero){for(int j = 0; j < matrix[0].size(); ++j)matrix[0][j] = 0;}/* 設(shè)置第0列 */if(oneColumnZero){for(int i = 0; i < matrix.size(); ++i)matrix[i][0] = 0;}} }

本題要求空間復(fù)雜度在O(1),所以不能重新開辟一塊矩陣作為更新后的值。只能想辦法在原矩陣上做修改,而對(duì)于遞歸而言,每次遞歸都要遞歸一整行和一整列,遞歸深度過深,容易出錯(cuò)。那么就只能在原矩陣中找一些位置記錄都有哪幾行哪幾列應(yīng)該被置為0,這個(gè)過程中需要考慮如果將第0行第0列那個(gè)位置置為0的話,會(huì)導(dǎo)致整個(gè)矩陣變?yōu)?,所以需要單獨(dú)考慮。

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二区三区在线视频 | 欧洲精品免费一区二区三区 | 九色麻豆 | 日本99热| www国产一区 | 天天做天天爱夜夜爽 | 亚洲成人黄色影院 | 日本久久片 | 高清日韩av| 久久久久久av无码免费网站下载 | 日本一区二区在线不卡 | 伊人精品视频在线观看 | 婷婷的五月天 | 日本不卡一二三 | 亚洲AV成人午夜无码精品久久 | 丁香花电影在线观看免费高清 | 3d动漫精品啪啪一区二区竹菊 | 亚洲成人毛片 | 国产视频a | 91一区二区在线 | 国产精品视频在线观看免费 | 在线观看国产麻豆 | 欧美日韩一区二区三区四区五区 | 欧美乱妇日本无乱码特黄大片 | 欧美高清大白屁股ass18 | 男女啪啪在线观看 | 日本va欧美va欧美va精品 | 国产高潮网站 | 国产精品69毛片高清亚洲 | 国语对白做受xxxxx在线中国 | 欧美日韩一区在线播放 | 色网站免费在线观看 | 97se综合 | 孕妇丨91丨九色 | 欧美日韩免费在线视频 | 成都4电影免费高清 | 好吊色视频一区二区三区 | 视频三区在线 | 欧美激情精品久久久久久蜜臀 | 国产在线视频99 | 四虎久久| 手机午夜视频 | 黄色小说网站在线观看 | 深爱综合网 | 伊人网在线 | 直接看的av | 蜜桃网av | 日韩一区久久 | 日韩高清中文字幕 | 人妻熟女一区二区aⅴ水野 91在线观看视频 | 精品国产一区二区三区久久狼黑人 | 毛片一级在线观看 | av尤物| 亚洲色图35p | 五月天色综合 | 一级二级三级黄色片 | 午夜视频在线 | 亚洲图片欧美色图 | 亚洲精品天堂成人片av在线播放 | 国产稀缺真实呦乱在线 | 国产成人精品国内自产拍免费看 | 免费特级毛片 | 九九热这里都是精品 | 久久韩日 | 一起草国产| caoporen在线| 国产在线精品视频 | 成人免费视频国产免费 | 欧美黄色大片在线观看 | 国产精品久久国产精麻豆96堂 | 成人国产三级 | 黄色大片网站在线观看 | 五月天综合激情网 | 亚洲精品在线观看视频 | av毛片在线播放 | 精品无码久久久久久久 | 中韩毛片 | 欧美日本高清视频 | 韩日av一区二区 | 亚洲一区二区三区在线播放 | cao久久| 国产欧美一区二区三区在线老狼 | 九色在线观看 | 激情综合激情五月 | 亚洲 成人 av| 黄污视频网站 | 91麻豆蜜桃一区二区三区 | 深夜视频在线看 | 国产a√精品区二区三区四区 | 国产一线二线在线观看 | 久久久精品视频在线 | 精品人妻中文无码av在线 | 久久国产精品首页 | 瑟瑟视频免费看 | 亚洲一二三四 | 国产极品美女高潮无套在线观看 | 国产精伦 | 日韩欧美一级在线 | 国产美女主播在线 |