Leet code 73矩陣置零 C語言版

2021-08-20 08:10:08 字數 1551 閱讀 7743

題目描述:

給定乙個 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]

]

高階:

題幹分析:

本題要求依舊比較簡單,最粗暴的做法是將陣列遍歷,遇到0時將對應的行和列進行標記(這裡不要用0標記,否則會判斷失誤);我們做進一步思考,發現並不需要反覆對陣列內所有元素進行標記,實際上我們只需要行和列的標記,至此解題思路就很明朗了;

思路分析:

我們需要新兩個的陣列來存放標記,標記最好選用bool型別,這樣輕鬆寫意,其實這裡的做法就是高階中的空間o(m+n);常數空間的做法應該如何完成?我的思路是借用陣列空間的第一行和第一列,但這裡會在標記後置零時給你帶來新的問題,你需要先判斷除去行列首尾的三個點,然後將行列首尾三個點單獨拿出來判斷,可以採用標記單獨標記:

如果不將此三點單獨拿出來討論,會嚴重影響整個置零過程,可以結合思考一下;

下圖為空間o(m+n)因未選取此類方法,固將示意圖貼出來

到這裡剩下的事情就是簡單的遞迴迴圈了,其實了解思路後本題還是很簡單的;

**如下:(因為lett_code中很多**比我寫的更加規範,固多有借鑑,侵刪)

void setzeroes(int** matrix, int matrixrowsize, int matrixcolsize)  /*if*/else if (matrix[i][j] == 0) //else if

}//for-2

}//for-1

for (i = 1; i < matrixrowsize; ++i) //for-2

}//for-1

for (i = 0; firstcolzero && i < matrixrowsize; ++i) //&&為短路判定,所以在這裡不用擔心多餘的判定

for (j = 0; firstrowzero && j < matrixcolsize; ++j) return ;//void函式建議各位也寫一下return,個人習慣問題

}

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...