给定一个仅包含数字 0-9 的字符串和一个目标值,在数字之间添加二元运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。
学习的别人的思路代码
原文链接:https://leetcode-cn.com/problems/expression-add-operators/solution/chui-su-fa-qing-xi-yi-dong-by-xiaoneng/
class Solution {
public List<String> addOperators(String num, int target) {
List<String> res = new ArrayList<String>();
dfs(num,target,0,0,"",1,res);
return res;
}
/*
* index所在字符串的下标值
* value当前表达式的值
* 当前表达式
* 上一个操作数的值
* res存储返回结果
*/
public void dfs(String num, int target, int index, long value, String express, long pre, List<String> res){
//边界情况的判断
if(index==num.length()){
if(value==target)
res.add(express);
return;
}
for(int i=index;i<num.length();i++){
String ss = num.substring(index,i+1);
long val = Long.valueOf(ss);
if(index==0){//第一个数字,不需要加符号
dfs(num,target,i+1,val,express+ss,val,res);
}else{
dfs(num,target,i+1,value+val,express+"+"+ss,val,res);//+
dfs(num,target,i+1,value-val,express+"-"+ss,-val,res);//-
dfs(num,target,i+1,value-pre+(pre*val),express+"*"+ss,pre*val,res);//*
}
if(val==0) return;//去除前导0,退出循环
}
}
}