• 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开头
            }
        }
    }

  • 相关阅读:
    直播预告|OceanBase 社区版 4.0 全解析
    2023年思维100秋季赛报名中,比赛安排、阶段、形式和5年真题资源
    Vue3 + ts +vite + elementplus
    计算机网络
    particles.js粒子特效(常用登录页背景)
    vue 普通组件的 局部注册
    如何在 Microsoft IIS 服务器中配置自定义 404 错误页面
    微服务[Nacos]
    2022杭电多校10(总结+补题)
    Spring参数校验
  • 原文地址:https://blog.csdn.net/yinhua405/article/details/126516771