微軟俱樂部程式設計題第二週第二題 將矩陣中的元素置零

2021-09-02 17:39:07 字數 2524 閱讀 4519

給定乙個mxn矩陣,如果矩陣中有元素0,則將其所在的行和列都置為0。請使用原地演算法。原題鏈結

例如:輸入:[

[1,1,1],

[1,0,1],

[1,1,1]

]輸出:[

[1,0,1],

[0,0,0],

[1,0,1]

]設定兩個長度分別為m和n的標記陣列分別記錄行和列是否有0,根據標記陣列將某些矩陣元素置0。

class

solution

:def

setzeroes

(self, matrix)

:"""

:type matrix: list[list[int]]

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

"""m =

len(matrix)

if m ==0:

return

n =len(matrix[0]

)if n ==0:

return

row =

[false

]* m

col =

[false

]* n

for i in

range

(m):

for j in

range

(n):

if matrix[i]

[j]==0:

row[i]

=true

col[j]

=true

for i in

range

(m):

if row[i]

:for j in

range

(n):

matrix[i]

[j]=

0for j in

range

(n):

if col[j]

:for i in

range

(m):

matrix[i]

[j]=

0return

首先記錄第1行和第1列是否需要置0,這裡需要兩個常數空間來標記,然後用第1行和第1列作為標記陣列的空間,來對除第1行和第1列之外的行和列進行記錄。最後根據記錄將某些矩陣元素置0。

class

solution

(object):

defsetzeroes

(self, matrix)

:"""

:type matrix: list[list[int]]

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

"""m =

len(matrix)

if m ==0:

return matrix

n =len(matrix[0]

)if n ==0:

return matrix

flag_row =

false

flag_column =

false

#記錄第1行和第1列是否置0

for i in

range

(n):

if matrix[0]

[i]==0:

flag_row =

true

break

for j in

range

(m):

if matrix[j][0

]==0:

flag_column =

true

break

#用第1行和第1列記錄其他行和列是否置0

for i in

range(1

, m)

:for j in

range(1

, n)

:if matrix[i]

[j]==0:

matrix[0]

[j]=

0 matrix[i][0

]=0#改變其他行和列的值

for i in

range(1

, m)

:for j in

range(1

, n)

:if matrix[0]

[j]==

0or matrix[i][0

]==0:

matrix[i]

[j]=

0#改變第一行和第一列的值

if flag_row:

for j in

range

(n):

matrix[0]

[j]=

0if flag_column:

for i in

range

(m):

matrix[i][0

]=0

微軟俱樂部程式設計題第一周第二題 矩形覆蓋

我們可以用2x1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2x1的小矩形無重疊地覆蓋乙個2xn的大矩形,總共有多少種方法?我們先把2xn的覆蓋方法記為f n 用第乙個1x2小矩陣覆蓋大矩形的最左邊時有兩個選擇,豎著放或者橫著放。當豎著放的時候,右邊還剩下2x n 1 的區域,這種情況下的覆蓋方...

微軟俱樂部程式設計題第二週第三題 刪除鍊錶中重複的結點

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 刪除重複結點,只需要記錄當前結點前的最晚訪問過的不重複結點ppre 當前結點pcur 指向當前結點後面的結點pnext的三個指標即可。如果當前節...

第二章程式設計題

庫函式標頭檔案包含 include include include 函式狀態碼定義 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 typedef int st...