class Solution(object): # DFS: iterative implement. def is_additive_number(self, num): length = len(num) for i in range(1, int(length/2+1)): for j in range(1, int((length-i)/2 + 1)): first, second, others = num[:i], num[i:i+j], num[i+j:] if self.isValid(first, second, others): return True return False def isValid(self, first, second, others): if ((len(first) > 1 and first[0] == "0") or (len(second) > 1 and second[0] == "0")): return False sum_str = str(int(first) + int(second)) if sum_str == others: return True elif others.startswith(sum_str): return self.isValid(second, sum_str, others[len(sum_str):]) else: return False if __name__ == "__main__": print(Solution().is_additive_number('66121830')) print(Solution().is_additive_number('51123')) print(Solution().is_additive_number('235813'))