我的思路
這個題目不難,就是一句話,遍歷這個矩陣的時候,當遇到0的時候就把該行該列改為0,同時為了不影響后續的遍歷,我們可以將這個遍歷和修改分為兩個數組。使用mn的輔助空間
class Solution {public void setZeroes(int[][] matrix) {//如果只是使用m+n的空間int m = matrix.length,n = matrix[0].length;Set<Integer> line = new HashSet<>();Set<Integer> row = new HashSet<>();for(int i =0;i<m;i++){for(int j =0;j<n;j++){if(matrix[i][j]==0){line.add(i);row.add(j);}}}for(int num:line){for(int k=0;k<n;k++){matrix[num][k]=0;}}for(int num:row){for(int k=0;k<m;k++){matrix[k][num]=0;}}}
}
如果使用m+n的輔助空間,我們可以使用set來使用,set可以去重
class Solution {public void setZeroes(int[][] matrix) {//如果只是使用m+n的空間int m = matrix.length,n = matrix[0].length;Set<Integer> line = new HashSet<>();Set<Integer> row = new HashSet<>();for(int i =0;i<m;i++){for(int j =0;j<n;j++){if(matrix[i][j]==0){line.add(i);row.add(j);}}}for(int num:line){for(int k=0;k<n;k++){matrix[num][k]=0;}}for(int num:row){for(int k=0;k<m;k++){matrix[k][num]=0;}}}
}
其它思路
沒有找到靈神的題解,可能靈神覺得這個題目不值得研究吧。
不過找到了一個只用了O(1)復雜度的大佬,看一下他的解法
他的做法主要分為三步,利用第一行和第一列進行標記
- 第一輪:從
(1,1)
開始掃,用第一行、第一列做標記。 - 第二輪:再從
(1,1)
開始,根據標記把相應位置清零。 - 最后:根據兩個 flag 決定要不要把第一行、第一列全部清零。
class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;boolean row0_flag = false;boolean col0_flag = false;// 第一行是否有零for (int j = 0; j < col; j++) {if (matrix[0][j] == 0) {row0_flag = true;break;}}// 第一列是否有零for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) {col0_flag = true;break;}}// 把第一行第一列作為標志位for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}// 置0for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (row0_flag) {for (int j = 0; j < col; j++) {matrix[0][j] = 0;}}if (col0_flag) {for (int i = 0; i < row; i++) {matrix[i][0] = 0;}} }
}作者:powcai
鏈接:https://leetcode.cn/problems/set-matrix-zeroes/solutions/6594/o1kong-jian-by-powcai/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
```里寫自定義目錄標題)# 歡迎使用Markdown編輯器你好! 這是你第一次使用 **Markdown編輯器** 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本語法知識。## 新的改變我們對Markdown編輯器進行了一些功能拓展與語法支持,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫博客:1. **全新的界面設計** ,將會帶來全新的寫作體驗;2. 在創作中心設置你喜愛的代碼高亮樣式,Markdown **將代碼片顯示選擇的高亮樣式** 進行展示;3. 增加了 **圖片拖拽** 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示;4. 全新的 **KaTeX數學公式** 語法;5. 增加了支持**甘特圖的mermaid語法[^1]** 功能;6. 增加了 **多屏幕編輯** Markdown文章功能;7. 增加了 **焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設置** 等功能,功能按鈕位于編輯區域與預覽區域中間;8. 增加了 **檢查列表** 功能。[^1]: [mermaid語法說明](https://mermaidjs.github.io/)## 功能快捷鍵撤銷:<kbd>Ctrl/Command</kbd> + <kbd>Z</kbd>
重做:<kbd>Ctrl/Command</kbd> + <kbd>Y</kbd>
加粗:<kbd>Ctrl/Command</kbd> + <kbd>B</kbd>
斜體:<kbd>Ctrl/Command</kbd> + <kbd>I</kbd>
標題:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd>
無序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>U</kbd>
有序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>O</kbd>
檢查列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd>
插入代碼:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>K</kbd>
插入鏈接:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>L</kbd>
插入圖片:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>
查找:<kbd>Ctrl/Command</kbd> + <kbd>F</kbd>
替換:<kbd>Ctrl/Command</kbd> + <kbd>G</kbd>## 合理的創建標題,有助于目錄的生成直接輸入1次<kbd>#</kbd>,并按下<kbd>space</kbd>后,將生成1級標題。
輸入2次<kbd>#</kbd>,并按下<kbd>space</kbd>后,將生成2級標題。
以此類推,我們支持6級標題。有助于使用`TOC`語法后生成一個完美的目錄。## 如何改變文本的樣式*強調文本* _強調文本_**加粗文本** __加粗文本__==標記文本==~~刪除文本~~> 引用文本H~2~O is是液體。2^10^ 運算結果是 1024.## 插入鏈接與圖片鏈接: [link](https://www.csdn.net/).圖片: 帶尺寸的圖片: 居中的圖片: 居中并且帶尺寸的圖片: 當然,我們為了讓用戶更加便捷,我們增加了圖片拖拽功能。## 如何插入一段漂亮的代碼片去[博客設置](https://mp.csdn.net/console/configBlog)頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 `代碼片`.
```javascript
// An highlighted block
var foo = 'bar';
生成一個適合你的列表
- 項目
- 項目
- 項目
- 項目
- 項目1
- 項目2
- 項目3
- 計劃任務
- 完成任務
創建一個表格
一個簡單的表格是這么創建的:
項目 | Value |
---|---|
電腦 | $1600 |
手機 | $12 |
導管 | $1 |
設定內容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants將ASCII標點字符轉換為“智能”印刷標點HTML實體。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
創建一個自定義列表
- Markdown
- Text-to-HTML conversion tool Authors
- John
- Luke
如何創建一個注腳
一個具有注腳的文本。1
注釋也是必不可少的
Markdown將文本轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表達式 KaTeX:
Gamma公式展示 Γ(n)=(n?1)!?n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n?1)!?n∈N 是通過歐拉積分
Γ(z)=∫0∞tz?1e?tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞?tz?1e?tdt.
你可以找到更多關于的信息 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
- 關于 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:
這將產生一個流程圖。:
- 關于 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支持flowchart的流程圖:
- 關于 Flowchart流程圖 語法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。
導入
如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。
注腳的解釋 ??