題目描述
給定乙個 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...