forked from Sunchit/Coding-Decoded
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExpressionAddOperators.java
26 lines (24 loc) · 1.07 KB
/
ExpressionAddOperators.java
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
class Solution {
private List<String> ans = new ArrayList<>();
public List<String> addOperators(String s, int target) {
dfs( 0, "", 0, 0,s, target);
return ans;
}
private void dfs(int i, String path, long resSoFar, long prevNum, String s, int target) {
if (i == s.length()) {
if (resSoFar == target) ans.add(path);
return;
}
for (int j = i; j < s.length(); j++) {
if (j > i && s.charAt(i) == '0') break; // Skip leading zero number
long currNum = Long.parseLong(s.substring(i, j + 1));
if (i == 0) {
dfs(j + 1, path + currNum, currNum, currNum,s, target); // First num, pick it without adding any operator!
} else {
dfs(j + 1, path + "+" + currNum, resSoFar + currNum, currNum,s, target);
dfs(j + 1, path + "-" + currNum, resSoFar - currNum, -currNum, s, target);
dfs(j + 1, path + "*" + currNum, resSoFar - prevNum + prevNum * currNum, prevNum * currNum, s, target);
}
}
}
}