<LeetCode OJ> 241. Different Ways to Add Parentheses

Total Accepted: 23674 Total
Submissions: 65569 Difficulty: Medium

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]

Credits:

Special thanks to @mithmatt for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags

Divide and Conquer

Hide Similar Problems

(M) Unique Binary Search Trees II (H)
Basic Calculator
 (H) Expression Add Operators

分析:

本题不会,代码纯属借鉴和学习!

这是一个要考虑各种组合情况的问题,关键还是怎么入手得到各种组合情况!

从别人的代码来看,一旦遇到运算符号(不是运算符号暂时不处理),就分治法考虑各种组合情况:

然后将运算结果重新根据当前运算符进行运算。

class Solution {
public:
    vector<int> diffWaysToCompute(string input) {
        vector<int> result;
        int size = input.size();
        for (int i = 0; i < size; i++) {
            char cur = input[i];
            if (cur == '+' || cur == '-' || cur == '*') {//如果是运算符号
                // 分治法,分两边解决,解决获取结果之后重新根据当前符号进行运算
                vector<int> result1 = diffWaysToCompute(input.substr(0, i));//从0位置开始获取长度为i的字符串
                vector<int> result2 = diffWaysToCompute(input.substr(i+1));//从0位置开始获取后面所有字符
                for (auto n1 : result1) {
                    for (auto n2 : result2) {
                        if (cur == '+')
                            result.push_back(n1 + n2);
                        else if (cur == '-')
                            result.push_back(n1 - n2);
                        else
                            result.push_back(n1 * n2);
                    }
                }
            }
        }
        // 如果输入字符串只是数字(字符数字)
        if (result.empty())
            result.push_back(atoi(input.c_str()));
        return result;
    }
};

完整代码:

#include<iostream>
#include<vector>
using namespace std;

vector<int> diffWaysToCompute(string input) {
    vector<int> result;
    int len=input.size();
    for(int k=0;k<len;k++)
    {
        if(input[k]=='+'||input[k]=='-'||input[k]=='*')
        {
            vector<int> result1=diffWaysToCompute(input.substr(0,k));
            vector<int> result2=diffWaysToCompute(input.substr(k+1));
            for(vector<int>::iterator i=result1.begin();i!=result1.end();i++)
                for(vector<int>::iterator j=result2.begin();j!=result2.end();j++)
                {
                    if(input[k]=='+')
                        result.push_back((*i)+(*j));
                    else if(input[k]=='-')
                        result.push_back((*i)-(*j));
                    else
                        result.push_back((*i)*(*j));
                }
        }
    }
    if(result.empty())
        result.push_back(atoi(input.c_str()));
    return result;
}
int main()
{
    string input="2*3-4*5";
    vector<int> vec;
    vec=diffWaysToCompute(input);
    for(int i=0;i<vec.size();i++)
        cout<<vec[i]<<' ';
    cout<<endl;
    system("pause");
}

注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/51581228

原作者博客:http://blog.csdn.net/ebowtang

本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895

时间: 2024-11-09 19:29:14

<LeetCode OJ> 241. Different Ways to Add Parentheses的相关文章

LeetCode OJ : 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: 

【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 Outp

LeetCode 241. Different Ways to Add Parentheses

241. Different Ways to Add Parentheses Add to List Description Submission Solutions Total Accepted: 38849 Total Submissions: 92740 Difficulty: Medium Contributors: Admin Given a string of numbers and operators, return all possible results from comput

241. Different Ways to Add Parentheses

241. Different Ways to Add Parentheses https://leetcode.com/problems/different-ways-to-add-parentheses/ 思路就是:首先找到以运算符为根节点,分别计算左子串和右子串的所有结果的集合,然后依次进行组合计算.参考博客http://www.cnblogs.com/ganganloveu/p/4681439.html. 自己的思路错了,直接用两边只用了一个整数去接收左右子串的计算值!! #include

96. Unique Binary Search Trees &amp;&amp; 95. Unique Binary Search Trees II &amp;&amp; 241. Different Ways to Add Parentheses

96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 Tree Dynamic Program

(medium)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: 

leetcode 241. Different Ways to Add Parentheses (Python版)

题目: 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 *. 大意是给定一个运算,求解所有运算序列的解 例如 Input: "2*3-4*5" (2*(3-(4*5))) = -

[leedcode 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: 

241. Different Ways to Add Parentheses java solutions

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: