Expression Add Operators
自己的版本也做出来了,但是还是标准答案的版本更加简洁,这道题在枚举时的策略和Palindrome partition那道题是一样的,即一次取一个区间,同时对于当前值的计算又需要用到Basic calculator那道题的思路即有一个preVal和一个curVal来保证乘法的优先级,最后一个关于数字字符串处理时永远需要注意的点即leading zero的问题
class Solution(object):
def addOperators(self, num, target):
"""
:type num: str
:type target: int
:rtype: List[str]
"""
res = []
self.helper(num, 0, len(num), 0, 0, '', res, target)
return res
def helper(self, num, start, end, cur, mul, tmp, res, target):
if start >= end:
if cur == target:
res.append(tmp[:])
return
for i in xrange(start, end):
if num[start] == '0' and i > start:
break
if start == 0:
self.helper(num, i + 1, end, cur + int(num[start : i + 1]), int(num[start : i + 1]), num[start : i + 1], res, target)
else:
self.helper(num, i + 1, end, cur + int(num[start : i + 1]), int(num[start : i + 1]), tmp + '+' + num[start : i + 1], res, target)
self.helper(num, i + 1, end, cur - int(num[start : i + 1]), -int(num[start : i + 1]), tmp + '-' + num[start : i + 1], res, target)
self.helper(num, i + 1, end, cur - mul + mul * int(num[start : i + 1]), mul * int(num[start : i + 1]), tmp + '*' + num[start : i + 1], res, target)