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)

results matching ""

    No results matching ""