expression add operators


Expression Add Operators
这题因为没有涉及除法,所以可以用divide and conquer来做。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
List<String> ans;
public List<String> (String num, int target) {
ans = new ArrayList<>();
if (num == null || num.length() == 0)
return ans;
dfs(num, "", 0, 0, target, 0);
return ans;

}
public void dfs(String num, String path, int begin, long sum, int target, long prev) {
if (begin >= num.length()) {
if (sum == target) {
ans.add(path);
}
return;
}
for (int i = begin; i < num.length(); ++i) {

if (i != begin && num.charAt(begin) == '0')
break;
long val = Long.parseLong(num.substring(begin, i + 1));
if (begin == 0) {
dfs(num, path + val, i + 1, 0 + val, target, val);
} else {
dfs(num, path + "+" + val, i + 1, sum + val, target, val);
dfs(num, path + "-" + val, i + 1, sum - val, target, -val);
dfs(num, path + "*" + val, i + 1, sum + val * prev - prev, target, val * prev);
}
}
}