Expression Add Operators(dfs)
Input:
num
=
"123",
target
= 6
Output:
["1+2+3", "1*2*3"]Input:
num
=
"232",
target
= 8
Output:
["2*3+2", "2+3*2"]Last updated
Input:
num
=
"123",
target
= 6
Output:
["1+2+3", "1*2*3"]Input:
num
=
"232",
target
= 8
Output:
["2*3+2", "2+3*2"]Last updated
Input:
num
=
"105",
target
= 5
Output:
["1*0+5","10-5"]Input:
num
=
"00",
target
= 0
Output:
["0+0", "0-0", "0*0"]Input:
num
=
"3456237490",
target
= 9191
Output:
[]T(n) = 3 * T(n-1) + 3 * T(n-2) + 3 * T(n-3) + ... + 3 *T(1);
T(n-1) = 3 * T(n-2) + 3 * T(n-3) + ... 3 * T(1);
Thus T(n) = 4T(n-1);class Solution:
def addOperators(self, num, target):
"""
:type num: str
:type target: int
:rtype: List[str]
"""
ret = []
def dfs(exp, eval, start, prevn): # exp and eval看做路径,start是Pos,唯一多的这个Prevn是为了*
if start == len(num) and eval == target:
ret.append(exp)
return
for i in range(start, len(num)):
strcur = num[start:i + 1]
ncur = int(strcur)
if len(str(ncur)) != len(strcur):
break # 说明以0开头,这样这条路径后面情况也不必考虑
if start == 0:
dfs(exp + strcur, ncur, i + 1, ncur)
else:
dfs(exp + '+' + strcur, eval + ncur, i + 1, ncur)
dfs(exp + '-' + strcur, eval - ncur, i + 1, -ncur) # 这里-ncur是为了将来*,不需要记录之前的符号
dfs(exp + '*' + strcur, eval - prevn + prevn * ncur, i + 1, prevn * ncur)
dfs('', 0, 0, 0)
return ret