package main.java;
import java.util.ArrayList;
import java.util.List;
public class 给表达式添加运算符回溯算法解决 {
public static void main(String[] args) {
String ss = "232";
int t =8;
System.out.println(funoin(ss,t));
}
private static List<String> funoin(String ss, int t) {
List<String> res = new ArrayList<>();
dfs(res,ss,t,0,0,0,"");
return res;
}
/**
* @param res 返回的结果
* @param ss 字符串num
* @param t 目标值target
* @param i 访问到字符串的第几个字符
* @param i1 前面的连续乘积(乘法的时候会用到)
* @param i2 表达式前面计算得到的和
* @param s 算术表达式,可以看做n叉树的路径
*/
private static void dfs(List<String> res, String ss, int t, int i, int i1, int i2, String s) {
if(i>=ss.length()){
if(i2==t){
res.add(s);
}
return;
}
for(int x = i;x<ss.length();x++){
if(x!=i && ss.charAt(i) == '0'){
break;
}
int number = (int)Long.parseLong(ss.substring(i,x+1));
if(i == 0){
dfs(res,ss,t,x+1,number,number,number+""+s);
}
else{
dfs(res,ss,t,x+1,number,i2+number,s+"+"+number);
dfs(res,ss,t,x+1,-number,i2-number,s+"-"+number);
dfs(res,ss,t,x+1,i1*number,i2+i1*number-i1,s+"*"+number);//小细节 1-1
}
}
}
}
给表达式添加运算符回溯算法解决
于 2022-09-11 23:05:17 首次发布