Leetcode Algorithm No.241 Different Ways to Add Parentheses
4101 ワード
Pythonの浅いコピーを初めて知った
テーマは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
Example 1
Input:
Output:
Example 2
Input:
Output:
Program language: Python 3.4
正常に実行された第Nバージョンでは、期待される結果は得られませんでした.
上記の問題に鑑みてitercalculate関数を更新しdelコマンドを使用しない
期待結果を出力:
>>> [10, -14, -10, -10, -14, -34]
テーマは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バージョンでは、期待される結果は得られませんでした.
'''calculat +,-,* , calculat([1,2],'+'), 3'''
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
'''itercalculate list,value ,oper ,value oper 1
'''
def itercalculate(value,oper,out=[]):
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])
subvalue = value
suboper = oper
print (id(value),' ' , id(oper))
print (id(subvalue),' ' , id(suboper))
''' id value subvalue , ,
, subvalue = value , subvalue ,
subvalue value'''
subvalue[i] = result
del subvalue[i+1]
del suboper[i]
itercalculate(subvalue,suboper)
i=i+1
'''diffWaysToCompute , list :value
operator.
"2*3-4*5", value=[2,3,4,5],oper=[*,-,*]
itercalculate, value operator , '''
def diffWaysToCompute(input,out):
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
out=itercalculate(value,operator,out)
return out
s="2*3-4*5"
out=[]
diffWaysToCompute(s,out)
print(' : ',out)
'''
:
>>>
before del [2, 3, 4, 5] ['*', '-', '*'] 0
58214280 58213680
58214280 58213680
before del [6, 4, 5] ['-', '*'] 0
58214280 58213680
58214280 58213680
: None
'''
'''
itercalculate while del subvalue suboper 。
del value oper 。
subvalue suboper del value oper 。
。
'''
上記の問題に鑑みてitercalculate関数を更新しdelコマンドを使用しない
'''
diffWaysToCompute , list 。
'''
def itercalculate(value,oper,out):
if len(oper) == 1:
out.append(calculat(value,oper))
return out
else:
i=0
while i<len(oper):
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(subvalue,suboper,out)
i=i+1
期待結果を出力:
>>> [10, -14, -10, -10, -14, -34]