dfs、状压
from functools import lru_cache
class Solution:
def makesquare(self, matchsticks):
if sum(matchsticks) % 4:
return False
one = sum(matchsticks) // 4
n = len(matchsticks)
start, end = 0, (1 << n) - 1
@lru_cache(None)
def dfs(x, nowl):
if nowl > one:
return False
if nowl == one:
if x == end:
return True
nowl = 0
for i in range(n):
if not x & (1 << i) and nowl + matchsticks[i] <= one:
if dfs(x ^ (1 << i), nowl + matchsticks[i]):
return True
return False
return dfs(start, 0)