LeetCode演算法題73 矩陣置零解析

2021-09-11 01:49:05 字數 2277 閱讀 3601

給定乙個 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就行列都置零,所以有零時先將第一行和第一列的對應位置置零即可。

最後先根據第一行和第一列將整個矩陣除第一行和第一列之外的部分進行處理,然後根據兩個標識來處理第一行和第一列。

c++源**:

class

solution

for(

int j=

0;j)for

(int i=

1;i)for

(int j=

1;jfor(

int i=

1;i)for

(int j=

1;j(row_flag)

for(

int i=

0;i) matrix[i][0

]=0;

if(col_flag)

for(

int j=

0;j) matrix[0]

[j]=0;

}};

python3源**:

class

solution

:def

setzeroes

(self, matrix)

:"""

:type matrix: list[list[int]]

:rtype: void do not return anything, modify matrix in-place instead.

"""iflen

(matrix)==0

orlen

(matrix[0]

)==0:

return

m =len(matrix)

n =len(matrix[0]

) rowflag =

false

colflag =

false

for i in

range

(m):

if matrix[i][0

]==0:

rowflag =

true

for j in

range

(n):

if matrix[0]

[j]==0:

colflag =

true

for i in

range(1

, m)

:for j in

range(1

, n)

:if matrix[i]

[j]==0:

matrix[i][0

]=0 matrix[0]

[j]=

0for i in

range(1

, m)

:for j in

range(1

, n)

:if matrix[i][0

]==0or matrix[0]

[j]==0:

matrix[i]

[j]=

0if rowflag:

for i in

range

(m):

matrix[i][0

]=0if colflag:

for j in

range

(n):

matrix[0]

[j]=

0

leetcode 第73題 矩陣轉置

今天和昨天和明天搬家,可能不太有時間,今天抽空寫道題。給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。主要要求是原地轉置,所以比較難一點。class solution int m matrix.length int n matrix 0 le...

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 從頭遍歷陣列,記錄0存在的行號和列號,然後置零 class solution def setzero...

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