LeetCode_282给表达式添加运算符

给定一个仅包含数字 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,退出循环
        }
    }
}
发布了250 篇原创文章 · 获赞 0 · 访问量 1279

猜你喜欢

转载自blog.csdn.net/qq_36198826/article/details/103786110
今日推荐