2020/3/21 打卡
給定乙個 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。
(1)定義flag_line=false,判斷第一行是否需要置00。定義flag_row=false,判斷第一列是否需要置0。
(2)遍歷第一列,若第一列中存在0,將flag_row=true,表示需要將第一列置0。
(3)遍歷第一行,若第一行中存在0,將flag_line=true,表示需要將第一行置0。
(4)遍歷矩陣,遍歷區間,行區間[1,m),列區間[1,m),若matrix[i][j]==0,則將對應的行和列記錄下來,即將第一行和第一列中對應的位置置為0。matrix[i][0]=matrix[0][j]=0
(5)再遍歷一次矩陣,若當前位置的行或列索引對應的第一行或者第一列處為0,即matrix[i][0]==0 or matrix[0][j]==0,將此位置置為0。
(6)根據flag_line,判斷是否需要將第一行置為0。
(7)根據flag_row,判斷第一列是否需要置0。
時間複雜度:o(m*n)
空間複雜度:o(1)
class solution:
def setzeroes(self, matrix):
"""do not return anything, modify matrix in-place instead.
"""# 定義flag_line=false,判斷第一行是否需要置00。定義flag_row=false,判斷第一列是否需要置0。
flag_line=false
flag_row=false
m=len(matrix)
n=len(matrix[0])
#遍歷第一列,若第一列中存在0,將flag_row=true,表示需要將第一列置0。
for i in range(m):
if(matrix[i][0]==0):
flag_row=true
break
#遍歷第一行,若第一行中存在0,將flag_line=true,表示需要將第一行置0。
for i in range(n):
if(matrix[0][i]==0):
flag_line=true
break
#遍歷矩陣,遍歷區間,行區間[1,m),列區間[1,m),若matrix[i][j]==0,則將對應的行和列記錄下來,即將第一行和第一列中對應的位置置為0。matrix[i][0]=matrix[0][j]=0
for i in range(1,m):
for j in range(1,n):
if(matrix[i][j]==0):
matrix[i][0]=matrix[0][j]=0
#再遍歷一次矩陣,若當前位置的行或列索引對應的第一行或者第一列處為0,即matrix[i][0]==0 or matrix[0][j]==0,將此位置置為0。
for i in range(1,m):
for j in range(1,n):
if(matrix[i][0]==0 or matrix[0][j]==0):
matrix[i][j]=0
#根據flag_line,判斷是否需要將第一行置為0。 根據flag_row,判斷第一列是否需要置0。
if(flag_row):
for i in range(m):
matrix[i][0]=0
if(flag_line):
for i in range(n):
matrix[0][i]=0
LeetCode面試題 01 08 零矩陣
原題鏈結 題目 編寫一種演算法,若m n矩陣中某個元素為0,則將其所在的行與列清零。思路 遍歷第一行,若第一行存在0,記錄下來 遍歷第一列,若第一列存在0,記錄下來 遍歷矩陣中除去第一行和第一列的所有元素,若某一位置的元素為0,將該位置對應的行首元素和列首元素置為0 遍歷矩陣中除去第一行和第二列的所...
(劍指offer)面試題73 矩陣置零
給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。遍歷整個矩陣,如果matrix i j 0 就將第 i 行和第 j 列的第乙個元素標記。第一行和第一列的標記是相同的,都是matrix 0 0 所以需要乙個額外的變數告知第一列是否被標記,同時用...
leetcode 面試題 01 07 旋轉矩陣
面試題 01.07.旋轉矩陣 難度中等87 給你一幅由n n矩陣表示的影象,其中每個畫素的大小為 4 位元組。請你設計一種演算法,將影象旋轉 90 度。不占用額外記憶體空間能否做到?示例 1 給定matrix 1,2,3 4,5,6 7,8,9 原地旋轉輸入矩陣,使其變為 7,4,1 8,5,2 9...