Expression Add Operators

来源:互联网 发布:闪电邮mac版 编辑:程序博客网 时间:2024/05/21 18:40

Given a string that contains only digits 0-9 and a target value, return all possibilities to addbinary 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 -> []
class Solution {public:    vector<string> addOperators(string num, int target) {        int n = num.length();        vector<string> result;        visit(num, n, 0, 0, 0, "",  target, result);        return result;    }private:    void visit(string &num, int n, int pos, long cur, long prev, string buf, int target, vector<string> &result)    {        if (pos == n)        {            if (cur == target)            {                result.push_back(buf);            }            return;        }        for (int i = pos; i < n; i++)        {            if (num[pos] == '0' && i > pos)            {                break;            }            string temp = num.substr(pos, i-pos+1);            long val = stol(temp);            if (pos == 0)            {                visit(num, n, i+1, val, val, temp, target, result);            }            else            {                visit(num, n, i+1, cur+val, val,  buf+"+"+temp, target, result);                visit(num, n, i+1, cur-val, -val, buf+"-"+temp, target, result);                visit(num, n, i+1, cur-prev+prev*val, prev*val, buf+"*"+temp, target, result);            }        }    }};


0 0