題目描述:
給定乙個 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) 的額外空間,但這仍然不是最好的解決方案。
你能想出乙個常數空間的解決方案嗎?
空間複雜度 o(1) ;
時間複雜度o(mn) ;
用兩個布林變數就可以解決。
1)、布林值為了記錄首行和首列是否要置為全0;
2)、方法就是利用陣列的首行和首列來記錄 0 值。
從陣列下標的 a[1][1] 開始遍歷,
3)、首先按照首行首列中的0,將 其他對應的行和列置為0;
4)、根據布林值然後處理首行首列。
**實現:
class
solution
} boolean colflag =
false
;for
(int i =
0; i < matrix.length; i++)}
for(
int i =
1; i < matrix.length; i++)}
}for
(int i =
1; i < matrix[0]
.length; i++)}
}for
(int i =
1; i < matrix.length; i++)}
}if(rowflag)}if
(colflag)}}
}
解題思路(本人):
空間複雜度 o(m+n) ;
時間複雜度o(mn) ;
1)、使用乙個行的陣列記錄那些行內有0值;
2)、使用乙個列的陣列記錄那些行內有0值;
3)、根據行和列的資訊來將相應的行和列置為0;
**實現:
void
setzeroes
(vectorint>>
& matrix)}}
//根據行和列陣列來置包含0的行和列全為0。
for(
int li : mapline)
for(
int qu : mapque)
}
73 矩陣置零
方法1 賦值另存乙個m n的矩陣,在原矩陣為零的值相應置新的矩陣行和列為零。額外空間為o m n o m n o m n 方法2 兩個陣列,bool m 和 bool n 分別存某行有零,後者某列有零。之後根據陣列值將原矩陣相應位置置零。額外空間o m n o m n o m n 方法3 看來許久才...
73 矩陣置零
題目.middle 要想不使用額外空間,那麼就需要將標誌位設在原來的資料上面,這裡就把第一行和第一列用來儲存改行或者該列是否有0 的標誌,這樣原來是否是0就被覆蓋了,所以需要兩個標誌記錄下來 package main import fmt func setzeroes matrix int rows...
73 矩陣置零
給定乙個 m x n 的矩陣,如果乙個元素為 0 則將其所在行和列的所有元素都設為 0 請使用 原地 演算法。高階 乙個直觀的解決方案是使用 o mn 的額外空間,但這並不是乙個好的解決方案。乙個簡單的改進方案是使用 o m n 的額外空間,但這仍然不是最好的解決方案。你能想出乙個僅使用常量空間的解...