没什么好说的,遍历所有的 i * i ,通过递归函数求解所有的分割方案,判断是否为惩罚数即可
class Solution:
def punishmentNumber(self, n: int) -> int:
def find(s, target, now):
if now > target:
return False
if now + int(s) == target:
return True
for i in range(1, len(s)):
if find(s[i:], target, now + int(s[:i])):
return True
return False
ans = 0
for i in range(1, n + 1):
if find(str(i * i), i, 0):
ans += i * i
return ans