码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode Algorithm No.241Different Ways to Add Parentheses

时间:2015-08-31 15:21:41      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

题目来自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]



版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode Algorithm No.241Different Ways to Add Parentheses

标签:

原文地址:http://blog.csdn.net/huxian370/article/details/48133365

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!