13 - Medium - 矩陣置零

給定一個(gè) m x n 的矩陣,如果一個(gè)元素為 0,則將其所在行和列的所有元素都設(shè)為 0。請(qǐng)使用原地算法

示例 1:

輸入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
輸出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
</pre>

示例 2:

輸入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
輸出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]</pre>

進(jìn)階:

  • 一個(gè)直接的解決方案是使用 O(mn) 的額外空間,但這并不是一個(gè)好的解決方案。
  • 一個(gè)簡(jiǎn)單的改進(jìn)方案是使用 O(m + n) 的額外空間,但這仍然不是最好的解決方案。
  • 你能想出一個(gè)常數(shù)空間的解決方案嗎?

空間復(fù)雜度O(m + n),分別用兩個(gè)list記錄0的行列

class Solution:
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        row = []
        col = []
        for i in range(len(matrix)):
            for j in range(len(matrix[i])):
                if matrix[i][j] == 0:
                    row.append(i)
                    col.append(j)
        for i in row:
            matrix[i] = [0 for _ in range(len(matrix[i]))]
        for i in range(len(matrix)):
            for j in col:
                matrix[i][j] = 0

常數(shù)空間,用matrix 的首行首列記錄其余行的0的情況

class Solution:
    # @param matrix, a list of lists of integers
    # @return nothing (void), do not return anything, MODIFY matrix IN PLACE.
    def setZeroes(self, matrix):
        if len(matrix) == 0:
            return ;
        row, col = 1, 1
        for i in range(0, len(matrix)):
            if matrix[i][0] == 0:
                col = 0
        for j in range(0, len(matrix[0])):
            if matrix[0][j] == 0:
                row = 0
        
        for i in range(1, len(matrix)):
            for j in range(1, len(matrix[0])):
                if matrix[i][j] == 0:
                    matrix[i][0] = 0
                    matrix[0][j] = 0
        for i in range(1, len(matrix)):
            for j in range(1, len(matrix[0])):
                if matrix[i][0] == 0 or matrix[0][j] == 0:
                    matrix[i][j] = 0
                    
        if col == 0:
            for i in range(0, len(matrix)):
                matrix[i][0] = 0
        if row == 0:
            for j in range(0, len(matrix[0])):
                matrix[0][j] = 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,653評(píng)論 19 139
  • 2016年,想來(lái)一場(chǎng)愛(ài)去哪就去哪的長(zhǎng)途旅行! 我轉(zhuǎn)動(dòng)著地球儀 閉著眼睛發(fā)誓講 這次指到哪里我們就去哪里好不好 你微...
    阿拉蘇蘇蘇閱讀 612評(píng)論 0 0
  • 他很好,我卻不怎么愿意提起他。 說(shuō)起來(lái)有點(diǎn)早熟,因?yàn)槲胰松牡谝淮螒賽?ài)發(fā)生在小學(xué)。青梅竹馬、兩小無(wú)猜,當(dāng)時(shí)以為他是...
    柒愔閱讀 2,453評(píng)論 0 3

友情鏈接更多精彩內(nèi)容