73. Set Matrix Zeroes

這題如果用HashSet的O(m+n) Space來做的話学辱,應(yīng)該是個(gè)easy題的難度,我用兩分鐘寫了下褂痰。答案中有人用了一種O(1) Space的方法直晨,也在下面貼一下搀军。

O(m + n) SPACE

        public void setZeroes(int[][] matrix) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return;
        Set<Integer> row = new HashSet<>();
        Set<Integer> col = new HashSet<>();

        for (int i = 0; i < matrix.length; i++)
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] == 0) {
                    row.add(i);
                    col.add(j);
                }
            }

        for (int r : row) {
            for (int j = 0; j < matrix[0].length; j++) {
                matrix[r][j] = 0;
            }
        }
        
        for (int c : col) {
            for (int j = 0; j < matrix.length; j++) {
                matrix[j][c] = 0;
            }
        }

O(1) SPACE

這個(gè)方法的思路是,把每個(gè)0的字母所在的行和列映射到第一行和第一列上勇皇。它跳過了第一列罩句,因?yàn)樾枰玫谝涣械闹祦碜鲇成洹H绻惶^敛摘,那你把第一列的0也映射到第一行的頂端了门烂,第一行就沒法根據(jù)col來判斷是否需要set 0,比如

111
012

這樣的case就會(huì)變成全0的矩陣兄淫。
其實(shí)也可以把row也留出來但是沒必要诅福。沒用row,這也是為什么從row-1開始遍歷拖叙。但是最后的for (int j = cols - 1; j >= 1; j--)是可以改成從0開始的。

void setZeroes(vector<vector<int> > &matrix) {
    int col0 = 1, rows = matrix.size(), cols = matrix[0].size();

    for (int i = 0; i < rows; i++) {
        if (matrix[i][0] == 0) col0 = 0;
        for (int j = 1; j < cols; j++)
            if (matrix[i][j] == 0)
                matrix[i][0] = matrix[0][j] = 0;
    }

    for (int i = rows - 1; i >= 0; i--) {
        for (int j = cols - 1; j >= 1; j--)
            if (matrix[i][0] == 0 || matrix[0][j] == 0)
                matrix[i][j] = 0;
        if (col0 == 0) matrix[i][0] = 0;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赂乐,一起剝皮案震驚了整個(gè)濱河市薯鳍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挨措,老刑警劉巖挖滤,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異浅役,居然都是意外死亡斩松,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門觉既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惧盹,“玉大人,你說我怎么就攤上這事瞪讼【” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵符欠,是天一觀的道長(zhǎng)嫡霞。 經(jīng)常有香客問我,道長(zhǎng)希柿,這世上最難降的妖魔是什么诊沪? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任养筒,我火速辦了婚禮,結(jié)果婚禮上端姚,老公的妹妹穿的比我還像新娘晕粪。我一直安慰自己,他們只是感情好寄锐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布兵多。 她就那樣靜靜地躺著,像睡著了一般橄仆。 火紅的嫁衣襯著肌膚如雪剩膘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天盆顾,我揣著相機(jī)與錄音怠褐,去河邊找鬼。 笑死您宪,一個(gè)胖子當(dāng)著我的面吹牛奈懒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宪巨,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼磷杏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了捏卓?” 一聲冷哼從身側(cè)響起极祸,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怠晴,沒想到半個(gè)月后遥金,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒜田,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年稿械,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冲粤。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡美莫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出色解,到底是詐尸還是另有隱情茂嗓,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布科阎,位于F島的核電站述吸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝌矛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一道批、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧入撒,春花似錦隆豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至献雅,卻和暖如春碉考,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挺身。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工侯谁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人章钾。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓墙贱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贱傀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惨撇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容