怎么模仿別人做網(wǎng)站臺州專業(yè)關鍵詞優(yōu)化
1、題目來源
73. 矩陣置零 - 力扣(LeetCode)
2、題目描述
給定一個?m x n
?的矩陣,如果一個元素為?0?,則將其所在行和列的所有元素都設為?0?。請使用?原地?算法。
示例 1:
輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 輸出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
輸入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 輸出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
進階:
- 一個直觀的解決方案是使用 ?
O(mn)
?的額外空間,但這并不是一個好的解決方案。 - 一個簡單的改進方案是使用?
O(m?+?n)
?的額外空間,但這仍然不是最好的解決方案。 - 你能想出一個僅使用常量空間的解決方案嗎?
3、題解分享
// 方法一
class Solution {public void setZeroes(int[][] matrix) {// 思路:使用標記數(shù)組 + 定義兩個數(shù)組,用來標記某行或者某列是否包含0int n = matrix.length;int m = matrix[0].length;boolean[] rowVis = new boolean[n];boolean[] colVis = new boolean[m];for(int i = 0;i<n;++i){for(int j = 0;j<m;++j){if(matrix[i][j] == 0){rowVis[i] = true;colVis[j] = true;}}}for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (rowVis[i] || colVis[j]) {matrix[i][j] = 0;}}}}
}
//方法二
class Solution {public void setZeroes(int[][] matrix) {// 思路:使用兩個標記變量 + 實際上就是把標記數(shù)組換成matrix數(shù)組的第一行和第一列int n = matrix.length;int m = matrix[0].length;boolean row0 = false;boolean col0 = false;for(int j = 0;j <m ;++j){if(matrix[0][j] == 0){row0 = true;break;}}for(int i =0;i<n;++i){if(matrix[i][0] == 0){col0 = true;break;}}for(int i = 0;i<n;++i){for(int j = 0;j<m;++j){if(matrix[i][j] == 0){matrix[i][0] = 0;matrix[0][j] = 0;}}}for (int i = 1; i < n; ++i) {for (int j = 1; j < m; ++j) {if (matrix[i][0]==0 || matrix[0][j]==0) {matrix[i][j] = 0;}}}if(row0){for(int j = 0;j<m;++j){matrix[0][j] = 0;}}if(col0){for(int i = 0;i<n;++i){matrix[i][0] = 0;}}}
}