zoukankan      html  css  js  c++  java
  • leetcode 241: Different Ways to Add Parentheses

    Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +- and *.


    Example 1

    Input: "2-1-1".

    ((2-1)-1) = 0
    (2-(1-1)) = 2

    Output: [0, 2]


    Example 2

    Input: "2*3-4*5"

    (2*(3-(4*5))) = -34
    ((2*3)-(4*5)) = -14
    ((2*(3-4))*5) = -10
    (2*((3-4)*5)) = -10
    (((2*3)-4)*5) = 10

    Output: [-34, -14, -10, -10, 10]

    思路:分治,将exp根据运算符拆分成左右两个子表达式,分别计算,合并;(一个表达式遍历运算符,拆分多次)

    注意:input[i]-'0'

    注意:结果集不必去重

     1 class Solution {
     2 public:
     3     vector<int> diffWaysToCompute(string input) {
     4         vector<int> ans;
     5         int len = input.length();
     6         int flag=0;
     7         int i;
     8         for(i=0;i<len;i++)
     9         {
    10             char c = input[i];
    11             if(c=='+'||c=='-'||c=='*')
    12             {
    13                 flag=1;
    14                 vector<int> left = diffWaysToCompute(input.substr(0,i));
    15                 vector<int> right = diffWaysToCompute(input.substr(i+1,len-i-1));
    16                 for(int j=0;j<left.size();j++)
    17                 {
    18                     for(int k=0;k<right.size();k++)
    19                     {
    20                         int tmp=0;
    21                         if(c == '+')
    22                             tmp = left[j]+right[k];
    23                         if(c == '-')
    24                             tmp = left[j]-right[k];
    25                         if(c == '*')
    26                             tmp = left[j]*right[k];
    27                         ans.push_back(tmp);
    28                     }
    29                 }
    30             }
    31         }
    32         if(flag==0)
    33         {
    34             int tmp=0;
    35             for(i=0;i<len;i++)
    36             {
    37                 tmp = tmp*10 + input[i]-'0';
    38             }
    39             ans.push_back(tmp);
    40         }
    41         //vector<int> ans2(ans.begin(),ans.end());
    42         return ans;
    43     }
    44 };
    View Code

     附:

    1 set<int> s;
    2 s.insert(1);
    3 set<int> s(v.begin(),v.end());
    4 vector<int> v(s.begin(),s.end());
  • 相关阅读:
    从零开始学SQLSERVER-UNION
    从零开始学SQLSERVER-BETWEEN
    从零开始学SQLSERVER-LIKE
    从零开始学SQLSERVER-存储过程(基础用法)
    从零开始学SQLSERVER-TOP
    从零开始学SQLSERER-INNER JOIN
    从零开始学SQLSERVER-DELECT(删除)
    从零开始学SQLSERVER-ORDER BY(排序)
    从零开始学SQLSERVER-WHERE
    使用 C# 9 的records作为强类型ID
  • 原文地址:https://www.cnblogs.com/jsir2016bky/p/5748311.html
Copyright © 2011-2022 走看看