LeetCode 473 火柴拼正方形

2021-10-09 01:45:05 字數 1078 閱讀 4428

還記得童話《賣火柴的小女孩》嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。

輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形

我看到題目,很快就想到了等分k份陣列這道題目.

兩道題目幾乎就是一樣的。

首先要對nums逆序排序(非常重要),因為這樣回溯更快。優選選擇長度大的火柴,很快就能得出火柴被分配到第k個邊是否可以。

class

solution

:def

makesquare

(self, nums: list[

int])-

>

bool:if

len(nums)

<4:

return

false

size, mod =

divmod

(sum

(nums),4

)if mod !=0:

return

false

nums.sort(reverse=

true

) n =

len(nums)

edges =[0

]*4def

dfs(i)

:if i == n:

iflen

(set

(edges))==

1:return

true

return

false

for a in

range(4

):if edges[a]

+ nums[i]

<=size:

edges[a]

+= nums[i]

if dfs(i+1)

:return

true

edges[a]

-= nums[i]

return

false

return dfs(

0)

LeetCode 473 火柴拼正方形 C

還記得童話 賣火柴的小女孩 嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。示例 1 輸入 1,1,2,2,2 輸出 tr...

遞迴 LeetCode473 火柴拼正方形

回溯法的求解過程實質上是乙個先序遍歷一棵狀態樹的過程,只是這棵樹不是遍歷前預先建立的,而是隱含在遍歷的過程中。遞迴題的解法 首先把題目的決策樹畫出來,樹的層就是for迴圈,樹的深度就是要遞迴的引數i。畫出決策樹後,找規律,進行剪枝。e.g.輸入 1,1,2,2,2 放小球問題,總共四個盒子,每個數從...

473 火柴拼正方形

還記得童話 賣火柴的小女孩 嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。示例 1 輸入 1,1,2,2,2 輸出 tr...