摘要:把矩陣所有零點(diǎn)的行和列都置零,要求不要額外的空間。對(duì)于首行和首列的零點(diǎn),進(jìn)行額外的標(biāo)記即可。這道題我自己做了四遍,下面幾個(gè)問(wèn)題需要格外注意標(biāo)記首行和首列時(shí),從到遍歷時(shí),若有零點(diǎn),則首列標(biāo)記為從到遍歷,若有零點(diǎn),則首行標(biāo)記為。
Problem
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
ExampleGiven a matrix
[ [1,2], [0,3] ],
return
[ [0,2], [0,0] ]Challenge
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
把矩陣所有零點(diǎn)的行和列都置零,要求不要額外的空間。基本的思路是把這些零點(diǎn)坐標(biāo)的行和列都標(biāo)記下來(lái),只不過(guò)把標(biāo)記存在首行和首列。對(duì)于首行和首列的零點(diǎn),進(jìn)行額外的標(biāo)記即可。所以,算法的步驟為:
首行、首列標(biāo)記:分別標(biāo)記首行和首列是否有零點(diǎn);
子矩陣標(biāo)記:遍歷除首行和首列之外的整個(gè)矩陣,將所有零點(diǎn)的坐標(biāo)分別標(biāo)記在首行和首列;
子矩陣置零:遍歷除首行和首列的整個(gè)矩陣的所有點(diǎn),若某點(diǎn)映射在首行或首列的同列點(diǎn)或同行點(diǎn)為零點(diǎn),便置該點(diǎn)為零點(diǎn);
首行、首列置零:最后分別處理首行、首列,若標(biāo)記有零點(diǎn),則首行、首列全部置零。
這道題我自己做了四遍,下面幾個(gè)問(wèn)題需要格外注意:
標(biāo)記首行和首列時(shí),從0到m遍歷matrix[i][0]時(shí),若有零點(diǎn),則首列標(biāo)記為true;從0到n遍歷matrix[0][j],若有零點(diǎn),則首行標(biāo)記為true。
必須先標(biāo)記和置零子矩陣,即行和列的循環(huán)都從1開(kāi)始,否則會(huì)影響最后對(duì)首行和首列的置零。
Solutionpublic class Solution { public void setZeroes(int[][] matrix) { boolean row = false, col = false; if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return; int m = matrix.length, n = matrix[0].length; for (int i = 0; i < m; i++) { if (matrix[i][0] == 0) col = true; } for (int j = 0; j < n; j++) { if (matrix[0][j] == 0) row = true; } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (matrix[i][j] == 0) { matrix[i][0] = matrix[0][j] = 0; } } } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (matrix[i][0] == 0 || matrix[0][j] == 0) { matrix[i][j] = 0; } } } for (int i = 0; i < m && col; i++) { matrix[i][0] = 0; } for (int j = 0; j < n && row; j++) { matrix[0][j] = 0; } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65701.html
摘要:這個(gè)方法的缺點(diǎn)在于,如果我們直接將存入首行或首列來(lái)表示相應(yīng)行和列要置的話,我們很難判斷首行或者首列自己是不是該置。 Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click to show follow up...
摘要:題目要求當(dāng)遇到數(shù)組中的值時(shí),即將該值所在的行和列全部改為。新建兩個(gè)數(shù)組分別代表該行和該列是否需要清零。然后根據(jù)這兩個(gè)數(shù)組的情況對(duì)原數(shù)組進(jìn)行賦值。雖然這意味著犧牲了一點(diǎn)時(shí)間性能,但是如果數(shù)據(jù)量非常龐大的話是非常好的一種實(shí)現(xiàn)。 題目要求 Given a m x n matrix, if an element is 0, set its entire row and column to 0....
摘要:前言從開(kāi)始寫相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒(méi)有按順序?qū)懍F(xiàn)在翻起來(lái)覺(jué)得蠻亂的。可能大家看著也非常不方便。所以在這里做個(gè)索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開(kāi)始寫leetcode相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒(méi)有按順序?qū)憽F(xiàn)在翻起來(lái)覺(jué)得蠻亂的。可能大家看著也非常不方便。所以在這里做個(gè)索引嘻嘻。 順序整理 1~50 1...
摘要:每天會(huì)折騰一道及以上題目,并將其解題思路記錄成文章,發(fā)布到和微信公眾號(hào)上。三匯總返回目錄在月日月日這半個(gè)月中,做了匯總了數(shù)組知識(shí)點(diǎn)。或者拉到本文最下面,添加的微信等會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。 LeetCode 匯總 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...
摘要:題目鏈接題目分析給定一個(gè)整數(shù)數(shù)組,將值為的元素移動(dòng)到數(shù)組末尾,而不改動(dòng)其他元素出現(xiàn)的順序。再在去后的元素末尾填充到計(jì)算出的數(shù)組長(zhǎng)度。最終代碼若覺(jué)得本文章對(duì)你有用,歡迎用愛(ài)發(fā)電資助。 D68 283. Move Zeroes 題目鏈接 283. Move Zeroes 題目分析 給定一個(gè)整數(shù)數(shù)組,將值為0的元素移動(dòng)到數(shù)組末尾,而不改動(dòng)其他元素出現(xiàn)的順序。 思路 計(jì)算總共有多少個(gè)元素。 再...
閱讀 2079·2021-09-22 15:54
閱讀 1838·2021-09-04 16:40
閱讀 864·2019-08-30 15:56
閱讀 2630·2019-08-30 15:44
閱讀 2156·2019-08-30 13:52
閱讀 1129·2019-08-29 16:35
閱讀 3350·2019-08-29 16:31
閱讀 2570·2019-08-29 13:48