Link: https://leetcode.com/problems/find-the-punishment-number-of-an-integer/description/ ## 思路 遍历所有数字 看能不能被partition canPartition function里面用到recursion 从左到右遍历所有位置作为partition point 左边不拆分 右边recursion拆分 看是否能凑出 ## Code ```python= class Solution: def punishmentNumber(self, n: int) -> int: def canPartition(sqr, i): if i<0: return False if i==0 and sqr=="": return True left = 0 for j in range(len(sqr)): left = left*10+int(sqr[j]) if canPartition(sqr[j+1:], i-left): return True if left>i: return False return False ans = 0 for i in range(1, n+1): if canPartition(str(i*i), i): ans += i*i return ans ```