• 653 · 添加运算符


    描述

    给定一个仅包含数字 0 - 9 的字符串和一个目标值,返回在数字之间添加了 二元 运算符(不是一元)+- 或 * 之后所有能得到目标值的情况。
    数字不包含前导 0

    样例

    样例 1:

     
    
    1. 输入:
    2. "123"
    3. 6
    4. 输出:
    5. ["1*2*3","1+2+3"]

    样例 2:

     
    
    1. 输入:
    2. "232"
    3. 8
    4. 输出:
    5. ["2*3+2", "2+3*2"]

    样例 3:

     
    
    1. 输入:
    2. "105"
    3. 5
    4. 输出:
    5. ["1*0+5","10-5"]

    样例 4:

     
    
    1. 输入:
    2. "00"
    3. 0
    4. 输出:
    5. ["0+0", "0-0", "0*0"]

    样例 5:

     
    
    1. 输入:
    2. "3456237490",
    3. 9191
    4. 输出:
    5. []

     

    vector result;

    vector addOperators(string &num, int target) {
        // write your code here
        dfs(num, target, 0, "", 0, 0);
        return result;
    }

    void dfs(string &num, int target, int start, string str, long long sum, long long lastF) {
        if (num.size() == start) {
            if (target == sum) {
                result.push_back(str);
            }
            return;
        }
        long long x = 0;
        string ret = "";
        for (int i = start; i < num.size(); ++i) {
            x = x * 10 + num[i] - '0'; //连续数据
            ret += num[i];
            if (start == 0) {
                dfs(num, target, i + 1, str + ret, x, x);//第一次开始
            }
            else {
                dfs(num, target, i + 1, str + "*" + ret, sum - lastF + x*lastF, x*lastF); //把上一个数据处理,和回溯
                dfs(num, target, i + 1, str + "+" + ret, sum + x, x);
                dfs(num, target, i + 1, str + "-" + ret, sum - x, -x);
            }
            if (x == 0) {
                break;//去掉0开头
            }
        }
    }

  • 相关阅读:
    木棒组合问题
    【Vue】Non-Props 属性是什么
    基于labview的信号采集与频率计算2
    一文详解动态链表和静态链表的区别
    求臻医学:乳腺癌治疗与基因检测 探索个性化医疗的未来
    STM32CubeMX安装、使用、配置
    【无标题】
    NFT 泡沫是否已经被挤破
    Webmin远程命令执行漏洞复现
    小张刷力扣--第二十二天
  • 原文地址:https://blog.csdn.net/yinhua405/article/details/126516771