【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;    
    }
};

 

posted @ 2017-05-07 21:26  Vincent丶丶  阅读(180)  评论(0编辑  收藏  举报