給了乙個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...