zoukankan      html  css  js  c++  java
  • 【LeetCode】282. Expression Add Operators

    题目:

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add binary operators (not unary) +-, or * between the digits so they evaluate to the target value.

    Examples:

    "123", 6 -> ["1+2+3", "1*2*3"] 
    "232", 8 -> ["2*3+2", "2+3*2"]
    "105", 5 -> ["1*0+5","10-5"]
    "00", 0 -> ["0+0", "0-0", "0*0"]
    "3456237490", 9191 -> []
    

      

    题解:

      想了半个小时还是想不出来,卡在乘上了,看了别人的代码,感觉这个处理很巧妙,基本思路和回溯递归差不多

    Soution 1 ()

    class Solution {
    public:
        void helper(string num, vector<string>& res, string s, int target, int pos, long cur, long pre) {
            if(pos == num.size()) {
                if(cur == target) res.push_back(s);
                return;
            }
            for(int i=pos; i<num.size(); i++) {
                     //首字符为0且长度大于1,那么这个字符串不能代表数字
                if(num[pos] == '0' && i>pos) break;
                string str = num.substr(pos, i-pos+1);
                long val = stol(str);
                if(pos == 0) 
                    helper(num, res, s+str, target, i+1, val, val);
                else {
                    helper(num, res, s+'+'+str, target, i+1, cur+val, val);
                    helper(num, res, s+'-'+str, target, i+1, cur-val, -val);
                    helper(num, res, s+'*'+str, target, i+1, cur-pre+pre*val, pre*val);
                }
            }
        }
        vector<string> addOperators(string num, int target) {
            vector<string> res;
            if(num.size() == 0) return res;
            helper(num, res, "", target, 0, 0, 0);
            return res;    
        }
    };
  • 相关阅读:
    c语言中的隐式函数声明(转)
    static关键字
    Eclipse中spring项目的XML文件的问题
    spring 中c3p0的优化配置
    Mysql通过SQL脚本复制表
    tomcat 设置内存
    删除无限循环的文件夹-删除递归文件夹
    使用cnpm代替npm
    数据库框架的log4j日志配置
    Win7删除远程连接历史记录
  • 原文地址:https://www.cnblogs.com/Atanisi/p/6814841.html
Copyright © 2011-2022 走看看