遞歸求解即可,一開始忘了考慮 0! 的情況,WA了幾次。。
def DFS(left, right, tmp_value, target):
if tmp_value == target:
return True
if left >= right or tmp_value > target:
return False
for i in range(left, right):
tmp_value += facs[i]
if DFS(i+1, right, tmp_value, target):
return True
tmp_value -= facs[i]
return False
facs = [1, 1]
for i in range(2, 100):
facs.append(facs[i-1]*i)
if facs[i] > 1000000:
break
while True:
try:
n = int(input().strip())
print('NO' if not DFS(0, len(facs), 0, n) or n == 0 else 'YES')
except:
break