[leetCode] Expression Add Operators

来源:互联网 发布:上海sai软件培训 编辑:程序博客网 时间:2024/05/29 11:47

 题意:给定只有0-9组成的字符串,在字符串加上二元+-*使之成为一个算式,其结果等于指定的一个数

思路1:首先枚举组成算式,再用栈进行计算。但是在栈的时间耗费太长,超时

思路2:这个是我从网上找的。递归加运算符号。用cur表示当前值,用diff表示变化值,这个思路比较巧妙,+和-的diff和cur比较好理解。*的不太好理解,多理解就发现巧妙之处了,上代码。

class Solution {public:    vector<string> addOperators(string num, int target) {        vector<string> res;        check(num,target,0,0,"",res);        return res;    }    void check(string num,long long target,long long cur,long long diff,string out,vector<string> &res)    {        if(num.size()==0)         {            if(cur==target) res.push_back(out);            return;        }        int i;        for(i=1;i<=num.size();i++)        {            string c=num.substr(0,i);            if(c.size()>1&&c[0]=='0') break;            string n=num.substr(i);            if(out.size()>0)            {                check(n,target,cur+stoll(c),stoll(c),out+"+"+c,res);                check(n,target,cur-stoll(c),-stoll(c),out+"-"+c,res);                check(n,target,cur-diff+diff*stoll(c),diff*stoll(c),out+"*"+c,res);            }            else            {                check(n,target,stoll(c),stoll(c),c,res);            }        }    }};


0 0
原创粉丝点击