牛客-計算機複試題-Sum of Factorials

遞歸求解即可,一開始忘了考慮 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章