Different Ways to Add Parentheses

#include<math.h>
class Solution {
public:
    vector<int> diffWaysToCompute(string input) {   //这个函数用来把输入“拆解”  eg 11+12+13  11 , + ,12 ,+ ,13 拆解后放在input_0中
        vector<int > res;
        int len = input.length();
        if(len < 1) return res;

        vector<string > input_0;
        int len0=0;
        string temp="";
        for(int i=0;i<len;i++){
            if(input[i] == '+' ||input[i] == '-'||input[i] == '*'){
                input_0.push_back(temp);
                temp = "";
                temp += input[i];
                input_0.push_back(temp);
                temp = "";
                len0+=2;
                continue;
            }
             temp+=input[i];
        } 
        input_0.push_back(temp);
        len0+=1;
   return diffWaysToCompute(input_0,0,len0-1);
    }
    
    vector<int> diffWaysToCompute(vector<string> & input_0,int left,int right) {             //这是最主要的计算函数,“动态规划的思想”,体现在for循环那里 分为(左)op(右) 
       
        vector<int> res;
        int len0=right-left+1; 
        if(len0%2==0) return res;
        if(len0==1){ 
            res.push_back(string_to_int(input_0[left]));
            return res;
        }
        if(len0 == 3){
             res.push_back(simple_op(string_to_int(input_0[left]),string_to_int(input_0[right]),input_0[left+1][0]));
             return res;
        }
        vector<int > res_a;
        vector<int > res_b;
        for(int i=0;i<len0-2;i+=2)    //i=0对应【{11},{12+13}】  i=2对应【{11+12},{13}】
        {
            cout<<i<<endl;
            char op = input_0[left+i+1][0];
            res_a = diffWaysToCompute(input_0,left,left+i);                      //得到左边结果  eg 【{11}直接返回  】
            res_b = diffWaysToCompute(input_0,left+i+2,right);                   //得到右边结果  eg 【{12+13}返回25】
            op_left_right(res_a,res_b,op,res);
         }  
         return res;
         
     }
    
    void op_left_right(vector<int > &res_a,vector<int > &res_b,char op,vector<int > &res){       //利用左边的结果 和 右边的结果 得到该表达式的结果
        for(int i=0;i<res_a.size();i++)
         for(int j=0;j<res_b.size();j++){
             res.push_back(simple_op(res_a[i],res_b[j],op));
         }
    }
    
    int string_to_int(string s){         //把string变成int
        int res = 0;
        int len = s.length();
        for(int i=len-1;i>=0;i--){
            res += (s[len-1-i]-'0') * pow(10,i);
        }
        return res;
    }
    
    int simple_op(int a,int b,char op){   //两个数 一个运算符 得到一个结果
            int res;
            switch (op){
                case '-':
                    res=a - b;
                    break;
                case '+':
                    res=a + b;
                    break;
                case '*':
                    res=a * b;
                    break;
            }
            return res;
    }
};

注意:正数不代表个位数!!!一定要考虑

        另外,这道题里面没有考虑负数

原文地址:https://www.cnblogs.com/julie-yang/p/5150934.html