刷題記錄 島嶼問題 冪集運算

2021-10-24 09:09:51 字數 2128 閱讀 1015

島嶼數量

題目描述:

給你乙個由 『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 資料範...