LeetCode 282. Expression Add Operators

来源:互联网 发布:网络医院预约挂号系统 编辑:程序博客网 时间:2024/05/16 06:30

Problem Statement

(Source) Given a string that contains only digits 0-9 and a target value, return all possibilities to add binary operators (not unary) +, -, or * between the digits so they evaluate to the target value.

Examples:

"123", 6 -> ["1+2+3", "1*2*3"] "232", 8 -> ["2*3+2", "2+3*2"]"105", 5 -> ["1*0+5","10-5"]"00", 0 -> ["0+0", "0-0", "0*0"]"3456237490", 9191 -> []

Tags: Divide and Conquer.

Solution 1 - Backtracking

# https://discuss.leetcode.com/topic/24523/java-standard-backtrace-ac-solutoin-short-and-clearclass Solution(object):    def addOperators(self, num, target):        """        :type num: str        :type target: int        :rtype: List[str]        """        res = []        self.helper(num, target, res, 0, 0, 0, '')        return res    def helper(self, num, target, res, start_index, left, to_mul, path):        if start_index == len(num):            if left == target:                res.append(path)        else:            for index in xrange(start_index, len(num)):                if num[start_index] == '0' and index != start_index:                    break                cur = int(num[start_index : index + 1])                # If it is the first number, no operators will preceed it.                if start_index == 0:                    self.helper(num, target, res, index+1, cur, cur, str(cur))                else:                    # If use '+' at current step:                    self.helper(num, target, res, index+1, left+cur, cur, path+'+'+str(cur))                    # If use '-' at current step:                    self.helper(num, target, res, index+1, left-cur, -cur, path+'-'+str(cur))                    # If use '*' at current step:                    self.helper(num, target, res, index+1, left-to_mul+to_mul*cur, to_mul*cur, path+'*'+str(cur))
0 0
原创粉丝点击