public class Solution {
public List<String> addOperators(String num, int target) {
List<String> list = new ArrayList<String>();
if(num == null || num.length() == 0) return list;
char ch[] = num.toCharArray();
String path = "";
getInfo(list,path,ch,target,0,0,0);
return list;
}
public void getInfo(List<String> list ,String path, char ch[] , int target, int pos, int eval , int multed ){
if(pos == ch.length){
if(eval == target){
if(!path.startsWith("-")){
list.add(path);
}
}
return;
}
for(int i=pos;i<ch.length;i++){
if(i!=pos && ch[pos] == '0') break;
int cur = 0;
// if(i+1<ch.length)
cur = combine(ch,pos,i+1);
if(pos == 0){
getInfo(list,path+cur,ch,target,i+1,cur,cur);
}else{
getInfo(list,path+"+"+cur,ch,target,i+1,eval+cur,cur);
getInfo(list,path+"-"+cur,ch,target,i+1,eval-cur,-cur);
getInfo(list,path+"*"+cur,ch,target,i+1,eval-multed+cur*multed,cur*multed);
}
}
}
public int combine(char ch[],int begin,int end){
int temp=0;
for(int i=begin;i<end;i++){
temp=temp*10+(ch[i]-'0');
}
return temp;
}
}
总结:此题有待深思熟虑,需要去深入了解递归的相关内容 plus 基本运算的逻辑。