4月30天leetcode訓練 Day16

2021-10-05 04:31:21 字數 2679 閱讀 8675

給了乙個2維陣列,裡面是由1和0組成。規則是這樣的,1代表陸地,0代表海水,讓我們尋找小島,那小島肯定有乙個特點,被水隔離,連續的陸地組成一塊小島,而本題中連續的定義為上下左右相鄰(不包括對角線)。基於這樣的規則讓我們找尋有幾個島。

example 1:

input:

11110

11010

11000

00000

output: 1

example 2:

input:

11000

11000

00100

00011

output: 3

通過深度優先搜素。dfs,遇到1的時候深度遍歷其左右上下相鄰的點,並將為1的點標記為0,這樣最後在初始for迴圈中用到了幾次的dfs,則有幾個小島。並且遍歷完整個陣列全是「水」。

class

solution

:def

numislands

(self, grid: list[list[

str]])

->

int:

# 深度優先遍歷dfs

# 如果遇到1,說明當前肯定有乙個小島了,此時將該位置設定為0,並且繼續對齊上下左右位置進行dfs.則最後用了多少次輔助函式即有多少個小島。

result =

0for i in

range

(len

(grid)):

for j in

range

(len

(grid[i]))

:if grid[i]

[j]==

'1':

result +=

1 self.dfs(grid,i,j)

return result

defdfs(self,grid,row,col)

: temp =[[

-1,0

],[0

,1],

[0,-

1],[

1,0]

]#這個表示當前位置前後左右移動的方向

grid[row]

[col]

='0'

for t in temp:

next_r,next_c = t[0]

+ row,t[1]

+ col

if next_r >=

0and next_c >=

0and next_r <

len(grid)

and next_c <

len(grid[row]):

if grid[next_r]

[next_c]

=='1'

: self.dfs(grid,next_r,next_c)

廣度優先搜尋演算法。bfs.

設定乙個陣列儲存當前為1的元素位置,然後就是出隊和入隊的操作。出隊乙個將其上下左右的位置都訪問一遍,如果為1則入隊,並且在網格中將該位置設為0(已訪問過)。最後隊列為空且網格都為0則訪問結束。

class

solution

:def

numislands

(self, grid: list[list[

str]])

->

int:

#bfs

iflen

(grid)

<=0or

len(grid[0]

)<=0:

return

0 temp =[[

0,-1

],[0

,1],

[1,0

],[-

1,0]

] queue =

result =

0for i in

range

(len

(grid)):

for j in

range

(len

(grid[i]))

:if grid[i]

[j]==

'1':

[i,j]

) result +=

1 grid[i]

[j]=

'0'while

len(queue)

>0:

q = queue.pop(

)for t in temp:

row,col = q[0]

+ t[0]

,q[1

]+ t[1]

if row >=

0and col >=

0and row <

len(grid)

and col <

len(grid[row]):

if grid[row]

[col]

=='1'

:print

(row,col)

[row,col]

) grid[row]

[col]

='0'

return result

4月30天leetcode訓練 Day15

給定乙個由n個整數組成的陣列,其中n 1,則返回乙個陣列輸出,使得output i 等於除nums i 之外的所有nums元素的乘積。example input 1,2,3,4 output 24,12,8,6 不考慮時間複雜度的話,通過遞迴暴力破解,設定遞迴輔助函式,傳入陣列和開始,結束位置。開始...

4月30天leetcode訓練 Day27

given a 2d binary matrix filled with 0 s and 1 s,find the largest square containing only 1 s and return its area.從乙個二維矩陣中找出最大的正方形面積 正方形裡面都是1才合法 input ...

4月30天leetcode訓練 Day6

given an array of strings,group anagrams together.給乙個由字串構成的陣列,讓我們把裡面字串由相同的字元組合起來的字串分成一組。input eat tea tan ate nat bat output ate eat tea nat tan bat n...