题目来自Leetcode
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +
, -
and *
.
Example 1
Input: "2-1-1"
.
((2-1)-1) = 0 (2-(1-1)) = 2
Output: [0, 2]
Example 2
Input: "2*3-4*5"
(2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10
Output: [-34, -14, -10, -10, 10]
Program language: Python 3.4
成功运行的第N版本
def calculat(value,oper): #print(input) result = 0 if len(oper) == 1: a = value[0] b = value[1] if oper[0] == '+': result = (a+b) elif oper[0] == '-': result = (a-b) elif oper[0] == '*': result = (a*b) return result def diffWaysToCompute(out, input): i=0 value = [] operator = [] while i<len(input): if i%2 == 0: value.append(int(input[i])) else: operator.append(input[i]) i=i+1 itercalculate(out,value,operator) return out ''' 在diffWaysToCompute 函数中对输入的字符串做处理,将数字与运算符分别存储在两个list中。 如此当某个运算出现负数时能方便处理 ''' def itercalculate(out,value,oper): if len(oper) == 1: out.append(calculat(value,oper)) return out else: i=0 while i<len(oper): #print ('before del',value,oper,i) result = calculat(value[i:i+2],oper[i]) if i==0: subvalue = value[1:] suboper = oper[1:] elif i==len(oper)-1: subvalue = value[0:i+1] suboper = oper[0:i] else: subvalue = value[0:i+1] + value[i+2:] suboper = oper[0:i] + oper[i+1:] subvalue[i] = result itercalculate(out,subvalue,suboper) i=i+1 #s='1+2+3' s="2*3-4*5" #s='2-1-1' out=[] diffWaysToCompute(out,s) print(out) ''' >>> [10, -14, -10, -10, -14, -34] '''
得到期望结果的第N+1版本。
更新后的while 循环体:
while i<len(oper): #print ('before del',value,oper,i) result = calculat(value[i:i+2],oper[i]) if i==0: subvalue = value[1:] suboper = oper[1:] elif i==len(oper)-1: subvalue = value[0:i+1] suboper = oper[0:i] else: subvalue = value[0:i+1] + value[i+2:] suboper = oper[0:i] + oper[i+1:] subvalue[i] = result itercalculate(out,subvalue,suboper) i=i+1
输出期望结果:
>>>
[10, -14, -10, -10, -14, -34]
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 11:30:46