Leetcode千題 968 兩數之和

2021-10-09 16:58:48 字數 1645 閱讀 9567

給定乙個二叉樹,我們在樹的節點上安裝攝像頭。

節點上的每個攝影頭都可以監視其父物件、自身及其直接子物件。

計算監控樹的所有節點所需的最小攝像頭數量。

首先要表示節點的狀態flag:沒有被覆蓋:0,被覆蓋:1,裝了攝像頭:2。

可以用遞迴的形式,也可以根據貪心,看兩個字節點的情況。

class

solution

:def

mincameracover

(self, root: treenode)

->

int:

@lru_cache(

none

)def

dfs(root, flag)

:### flag表示當前節點的狀態

ifnot root:

return

1if flag ==

2else

0 left, right = root.left, root.right

f0 =

1+ dfs(left,1)

+ dfs(right,1)

if flag ==2:

### 當前節點裝監視器,那麼他的子節點都被覆蓋

return f0

if flag ==0:

### 當前節點沒有被覆蓋,可以裝監視器,也可以讓子節點裝監視器來被覆蓋

return

min(

[dfs(left,2)

+ dfs(right,0)

, dfs(left,0)

+ dfs(right,2)

, f0]

)if flag ==1:

### 當前節點已經被覆蓋,可以裝監視器,如果當前不裝,那麼他的子節點都沒有被覆蓋

return

min(dfs(left,0)

+ dfs(right,0)

, f0)

return dfs(root,

0)

class

solution

:def

mincameracover

(self, root: treenode)

->

int:

self.res =

0def

dfs(root):if

not root:

return

1 left = dfs(root.left)

right = dfs(root.right)

if left ==

1and right ==1:

return

0if left ==

0or right ==0:

self.res +=

1return

2if left + right >=3:

return

1 m = dfs(root)

if m ==0:

self.res +=

1return self.res

Leetcode千題 1 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...

兩數之和(LeetCode題)

問題描述 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

LeetCode演算法題 兩數相除

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divis...