[leetcode 282]Expression Add Operators

来源:互联网 发布:易语言编程系统全套 编辑:程序博客网 时间:2024/06/10 05:45

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 -> []

Credits:
Special thanks to @davidtan1890 for adding this problem and creating all test cases.

给定一个由数字字符组成的字符串,在任意字符之间加入+、-、*构成数学表达式,使得表达式的结果为所给的target

AC代码:

class Solution{public:    vector<string> addOperators(string num, int target)    {        vector<string> res;        string temp="";        int len=num.size();        for(int i=1; i<=len; ++i)        {            string curString=num.substr(0,i);            if(curString.size()>1&&curString[0]=='0')                continue;            string nextString=num.substr(i,len-i);            long long curNum=stringToLonglong(curString);            temp="";            cal(nextString,target,curNum,curNum,curString,res);        }        return res;    }private:    long long stringToLonglong(string s)    {        stringstream ss;        ss<<s;        long long  res;        ss>>res;        return res;    }    void cal(string num,int target,long long last,long long cur,string temp,vector<string> &res)    {        int len=num.size();        if(len==0&&target==cur)        {            res.push_back(temp);            return ;        }        for(int i=1; i<=len; ++i)        {            string curString=num.substr(0,i);            string nextString=num.substr(i,len-i);            if(curString.size()>1&&curString[0]=='0')                return ;            long long curNum=stringToLonglong(curString);            cal(nextString,target,curNum,cur+curNum,temp+"+"+curString,res);            cal(nextString,target,-curNum,cur-curNum,temp+"-"+curString,res);            cal(nextString,target,last*curNum,cur-last+last*curNum,temp+"*"+curString,res);        }    }};

注意:int容易溢出;000、012...数字违法、字符串组成的数字也可以为target

其他leetcode题目AC代码:https://github.com/PoughER

0 0