Giả sử chúng ta có một số dương n, chúng ta phải kiểm tra xem n có thể được viết dưới dạng tổng các số giai thừa dương duy nhất hay không.
Vì vậy, nếu đầu vào là n =144, thì đầu ra sẽ là Đúng, là 4! + 5! =24 + 120 =144
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
sự thật:=1
-
res:=một danh sách mới
-
x:=2
-
trong khi thực tế <=n, thực hiện
-
chèn dữ kiện vào cuối res
-
fact:=fact * x
-
x:=x + 1
-
-
đối với tôi trong phạm vi kích thước res -1 đến 0, giảm 1, thực hiện
-
nếu n> =res [i], thì
-
n:=n - res [i]
-
-
-
trả về true khi n giống 0
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution: def solve(self, n): fact = 1 res = [] x = 2 while fact <= n: res.append(fact) fact = fact * x x += 1 for i in range(len(res)-1,-1,-1): if n>=res[i]: n-=res[i] return n==0 ob = Solution() print(ob.solve(144))
Đầu vào
144
Đầu ra
True