1.題目描述
給定乙個由 『1』(陸地)和 『0』(水)組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入:11110
11010
11000
00000
輸出: 1
示例 2:
輸入:11000
11000
00100
00011
輸出: 3
2.思路
深度優先遍歷,遍歷矩陣中的每乙個元素,如果為1則計數加1,同時把自己以及周圍(上下左右)的元素都置0,利用遞迴實現。
3.**
class
solution
(object):
defnumislands
(self, grid)
:"""
:type grid: list[list[str]]
:rtype: int
"""ifnot grid:
return
none
m =len(grid)
n =len(grid[0]
) res =
0for i in
range
(m):
for j in
range
(n):
if grid[i]
[j]:
res +=
1 self.intozero(grid,i,j)
return res
defintozero
(self, grid,i,j)
:if i <
0or j <
0or i >=
len(grid)
or j >=
len(grid[0]
):return
if grid[i]
[j]:
grid[i]
[j]=
0 self.intozero(grid, i +
1, j)
self.intozero(grid, i -
1, j)
self.intozero(grid, i, j -1)
self.intozero(grid, i, j +
1)
class
solution
(object):
defnumislands
(self, grid)
:"""
:type grid: list[list[str]]
:rtype: int
"""ifnot grid:
return
none
m =len(grid)
if m ==0:
return
0 n =
len(grid[0]
)if n ==0:
return
0 res =
0for i in
range
(m):
for j in
range
(n):
if grid[i]
[j]==
'1':
res +=
1 self.intozero(grid,i,j)
return res
defintozero
(self, grid, i, j)
: grid[i]
[j]=
'0'# 判斷上方字元
if i >
0and grid[i -1]
[j]==
'1':
self.intozero(grid, i -
1, j)
# 判斷左方字元
if j >
0and grid[i]
[j -1]
=='1'
: self.intozero(grid, i, j -1)
# 判斷下方字元
if i <
len(grid)-1
and grid[i +1]
[j]==
'1':
self.intozero(grid, i +
1, j)
# 判斷右方字元
if j <
len(grid[0]
)-1and grid[i]
[j +1]
=='1'
: self.intozero(grid, i, j +
1)
如果覺得對你有幫助的話,右上角,讚一波。謝謝支援!
leetcode python3 整數轉羅馬數字
1.思路 將數字分解成千位數 百位數 個位數,對不同的位數中分3個階段進行討論 9的 5 8之間的 4的 1 3之間的。對於不同的分位數和階段加上不同的符號處理 2.class solution def inttoroman self,num str if int num 1000 0 for i ...
單排leetcode python3 兩數相加
給定兩個非空鍊錶來代表兩個非負數,位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807class listnode def init...
Leetcode Python3 實現三數之和
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solu...