LeetCode 73 矩陣置零

2021-10-09 05:33:59 字數 2254 閱讀 4486

題目描述

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。

示例 1:

輸入:[[

1,1,

1],[

1,0,

1],[

1,1,

1]]輸出:[[

1,0,

1],[

0,0,

0],[

1,0,1]]

示例 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]

]

高階:

乙個直接的解決方案是使用 o(mn) 的額外空間,但這並不是乙個好的解決方案。

乙個簡單的改進方案是使用 o(m + n) 的額外空間,但這仍然不是最好的解決方案。

你能想出乙個常數空間的解決方案嗎

解題思路

方法一:

最直接的思路就是申請額外的空間去儲存0元素所在的行號和列號。

我們需要申請o(m + n)的額外空間,宣告兩個陣列,所佔空間分別為m, n。分別用來存放水平方向、豎直方向需要置零的元素下標。

首先先遍歷一遍陣列,將需要重置的行號和列號儲存在陣列m和n中。之後再遍歷一次原陣列,將需要置零的元素置為0。

注意:fill()方法用於將乙個固定值替換陣列的元素。語法:array.fill(value, start, end)

其有三個引數:

這種方法實現的時間複雜度為o(m * n)空間複雜度為o(m + n)

方法二:

題目上說了能否用常數空間來解決,那就來嘗試一下常數空間解決此問題。

如果想要常數空間,就需要再原陣列進行操作,我們可以在陣列的第一行和第一類在做標記,最後再根據第一行第一列的標記對陣列進行置零操作。

大致過程如下:

這種方法實現的時間複雜度為o(m * n)空間複雜度為o(1)

**實現

方法一:

/**

* @param matrix

* @return do not return anything, modify matrix in-place instead.

*/var

setzeroes

=function

(matrix)}}

for(

let i =

0; i < len; i++

)for

(let j =

0; j < m.length; j++)}

};

方法二:

/**

* @param matrix

* @return do not return anything, modify matrix in-place instead.

*/var

setzeroes

=function

(matrix)

for(

let j =

1; j < width; j++)}

}for

(let i = len -

1; i >=

0; i--)}

if(flag)}}

;

提交結果

方法一:

方法二:

leetcode 73 矩陣置零

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 示例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,4,5,0...

leetcode73 矩陣置零

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 空間複雜度為o mn 的解法自不用多說,直接新建乙個和matrix等大小的矩陣,然後一行一行的掃,只...

leetcode 73 矩陣置零

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 示例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,4,5,0...