【Leetcode】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]

思路:

从左到右开始遍历,遇到运算符 则将该运算符视为表达式的中心(left op right),表达式分成左右两部分,分别递归计算左右部分,并将结果和该运算符进行相应计算,本次计算相当于在该运算符两边加了个括号(left op right)。        将表达式中每个运算符都做一次如上操作,则得到所有可能情况下的结果值。为了优化时间,可以用一个hashmap保存已经计算过的情况。

算法

Map<String, List<Integer>> maps = new HashMap<String, List<Integer>>();  

public List<Integer> diffWaysToCompute(String input) {
    List<Integer> results = new ArrayList<Integer>();
    for (int i = 0; i < input.length(); i++) {
        char t = input.charAt(i);
        if (t == '+' || t == '-' || t == '*') {
            String sleft = input.substring(0, i);
            String sright = input.substring(i + 1);
            List<Integer> left, right;  

            if (maps.containsKey(sleft)) {
                left = maps.get(sleft);
            } else {
                left = diffWaysToCompute(input.substring(0, i));// 左右边所有可能的计算结果
            }  

            if (maps.containsKey(sright)) {
                right = maps.get(sright);
            } else {
                right = diffWaysToCompute(input.substring(i + 1));
            }  

            for (int l : left) {
                for (int r : right) {
                    int res = 0;
                    switch (t) {
                    case '+':
                        res = l + r;
                        break;
                    case '-':
                        res = l - r;
                        break;
                    case '*':
                        res = l * r;
                        break;
                    }
                    results.add(res);
                }
            }
        }
    }
    if (results.size() == 0) { // 当input为数字时
        results.add(Integer.parseInt(input));
    }
    return results;
}  
时间: 2024-10-06 10:50:32

【Leetcode】Different Ways to Add Parentheses的相关文章

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

[LeetCode][JavaScript]Different Ways to Add Parentheses

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". ((

【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 : Input: "2*3-4*5" (2*(3-(4*5))) = -34 ((2*3)-(4*5)) =

(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】Decode Ways

题目链接:https://leetcode.com/problems/decode-ways/ 题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, determine the total num

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))) = -

【leetcode】Decode Ways(medium)

A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, determine the total number of ways to decode it. For example,Given encoded

leetcode 之 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 O

【Leetcode】Decode Ways (DP)

A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, determine the total number of ways to decode it. For example, Given encoded