给表达式添加运算符回溯算法解决

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
            }
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值