島嶼數量
題目描述:
給你乙個由 『1』(陸地)和 『0』(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
python **如下:
class
solution
:# 方向陣列,表示了相對於當前位置的4個方向的橫縱座標的偏移量
directions =[(
-1,0
),(0
,-1)
,(1,
0),(
0,1)
]def
numislands
(self, grid: list[list[
str]])
->
int:
m =len(grid)
# 有多少行
if m ==0:
return
0 n =
len(grid[0]
)# 有多少列
marked =[[
false
for _ in
range
(n)]
for _ in
range
(m)]
count =
0# 從第1行、第1格,對每乙個格仔進行一次dfs操作
for i in
range
(m):
for j in
range
(n):
# 只要是陸地,且沒有被訪問過,就可以使用dfs發現與之相連的陸地,並進行標記
ifnot marked[i]
[j]and grid[i]
[j]==
'1':
# count 可以理解為連通分量,可以在深度優先遍歷完成以後再計數
count +=
1 self.__dfs(grid, i, j, m, n, marked)
return count
def__dfs
(self, grid, i,j, m, n, marked)
: marked[i]
[j]=
true
for direction in self.directions:
new_i = i + direction[0]
new_j = j + direction[1]
if0<= new_i < m and
0<= new_j < n and
not marked[new_i]
[new_j]
and grid[new_i]
[new_j]
=='1'
: self.__dfs(grid, new_i, new_j, m, n, marked)
x 的 n 次冪
用迭代的思路。
class
solution
:def
mypow
(self, x:
float
, n:
int)
->
float
:def
quickmul
(n):
ans =
1.0# 貢獻的初始值為 x
x_contribute = x
# 在對 n 進行二進位制拆分的同時計算答案
while n >0:
if n %2==
1:# 如果 n 二進位制表示的最低位為 1,那麼需要計入貢獻
ans *= x_contribute
# 將貢獻不斷地平方
x_contribute *= x_contribute
# 捨棄 n 二進位制表示的最低位,這樣我們每次只要判斷最低位即可
n //=
2return ans
return quickmul(n)
if n >=
0else
1.0/ quickmul(
-n)
leetcode刷題記錄 餅乾問題
因為自己的基礎實在太薄弱了,所以打算每天在leetcode上刷幾道題來彌補基礎知識 455.分發餅乾 難度 容易 假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i 都有乙個胃口值 gi 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j 都有...
劍指offer刷題記錄 位運算
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。由於數字在計算機中儲存的形式就是二進位制,因此可以直接將數字與1相與來判斷二進位制形式下最低位是否為1,然後右移數字繼續判斷直到數字為0即可。但是還要考慮負數形式,由於負數在儲存時,最高位有一符號位,在右移過程中最高位會不斷補1,所以...
刷題記錄 部分和問題
部分和問題 題目大意 給定幾個整數,判斷是否 可以從中選出若干數,使它們的和恰好為k。輸入要求 乙個整數n,接下來一行有n個數,代表a i 最後給出整數k。輸出要求 yse或no 輸入樣例1 4 1 2 4 7 13 輸出樣例1 yes 輸入樣例2 4 1 2 4 7 15 輸出樣例2 no 資料範...