leetcode 面試題73 矩陣置零

2021-10-04 05:18:55 字數 2161 閱讀 4815

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