leetcode---different ways to add parentheses

题意:给定一串包含数字和运算符的字符串,可以在表达式中合理地加上括号,运算符只有:+,-,*。返回所有可能的结果。

比如:

输入:“2-1-1”

可能的情况有:

1.((2-1)-1) = 0;

2.(2-(1-1))=2

 

  仔细观察可以看出,这个问题可以分成子问题的:对于一个运算符,可以在这个符号两边把字符串分成左右两个部分。然后左右两个部分又是一个同样的问题,于是可以使用递归来做。最后要注意终止条件。

  

vector<int> diffWaysToCompute(string input){
    vector<int> ans;
    for (int i = 0; i < input.length(); ++i){
        char cur = input[i];
        if (cur == '+' || cur == '-' || cur == '*'){
            vector<int> num1 = diffWaysToCompute(input.substr(0, i));
            vector<int> num2 = diffWaysToCompute(input.substr(i + 1));
            for (int j = 0; j < num1.size(); ++j){
                for (int k = 0; k < num2.size(); ++k){
                    if (cur == '+'){
                        ans.push_back(num1[j] + num2[k]);
                    }
                    else if (cur == '-'){
                        ans.push_back(num1[j] - num2[k]);
                    }
                    else {
                        ans.push_back(num1[j] * num2[k]);
                    }
                }
            }
        }
    }
    if (ans.empty()){
        ans.push_back(atoi(input.c_str()));
    }
    return ans;
}

 

  

 

posted @ 2015-08-18 19:21  marchlyp  阅读(162)  评论(0编辑  收藏  举报