LeetCode Q 282 - Expression Add Operators
Given a string that contains only digits 0-9 and a target value, return all possibilities to add binary operators (not unary) +, -, or * between the digits so they evaluate to the target value.
Example 1:Input: num = "123", target = 6 ; Output: ["1+2+3", "1*2*3"]
Example 2:Input: num = "232", target = 8 ; Output: ["2*3+2", "2+3*2"]
Example 3:Input: num = "105", target = 5 ; Output: ["1*0+5","10-5"]
Example 4:Input: num = "00", target = 0 ; Output: ["0+0", "0-0", "0*0"]
Example 5:Input: num = "3456237490", target = 9191 ; Output: []
Solution : DFS
- Corner Cases:
- if current position is 0, we can only use it as a single digit number, should be 0
- if it is not a single digit number with leading 0, it should be considered as an invalid number
- How to do multiplication?
 we should subtract previous number, and then add current multiplication result to the subtraction result
Code:
List<String> res;
public List<String> addOperators(String num, int target) {
	res = new ArrayList<>();
	if (num == null || num.length() == 0)
	    return res;
	dfs(num, target, "", 0, 0, 0);
	return res;
}
    
private void dfs(String num, int target, String exp, int index, long prev, long calVal) {
	if (index == num.length() && calVal == target) {
		res.add(exp); return;
	} 
	
	for (int i = index + 1; i < num.length(); i++) {
		if (i != index && num.charAt(index) == '0') continue;
		long num = Long.parseLong(s.substring(index, i));
		if (i == 0) {
			dfs(num, target, exp + num, i, num, num);
		} else {
			dfs(num, target, exp + "+" + num, i, num, calVal + num);
			dfs(num, target, exp + "-" + num, i, -num, calVal - num);
			dfs(num, target, exp + "*" + num, i, prev * num, calVal - prev + prev * num);
		}
	}
} 
                 
                        
                        