zoukankan      html  css  js  c++  java
  • 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]

    解决思路

    其实挺巧妙的,主要参考https://leetcode.com/discuss/48488/c-4ms-recursive-method

    理解这句话很重要:The key idea for this solution is: each operator in this string could be the last operator to be operated.

    核心思想是递归,然后边界条件是输入的字符串仅为数字。

    程序

    public class DifferentWaysToCompute {
    	public List<Integer> diffWaysToCompute(String input) {
    		List<Integer> list = new ArrayList<Integer>();
    		for (int i = 0; i < input.length(); i++) {
    			char c = input.charAt(i);
    			if (c == '+' || c == '-' || c == '*') {
    				// Split input string into two parts and solve them recursively
    				List<Integer> left = diffWaysToCompute(input.substring(0, i));
    				List<Integer> right = diffWaysToCompute(input.substring(i+1));
    				
    				// calculate each part
    				for (int j = 0; j < left.size(); j++) {
    					for (int k = 0; k < right.size(); k++) {
    						if (c == '+') {
    							list.add(left.get(j) + right.get(k));
    						} else if (c == '-') {
    							list.add(left.get(j) - right.get(k));
    						}else {
    							list.add(left.get(j) * right.get(k));
    						}
    					}
    				}
    			}
    		}
    		
    		if (list.isEmpty()) {
    			// input string contains only number
    			list.add(Integer.valueOf(input));
    		}
    		
    		return list;
    	}
    }
    

      

  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4682081.html
Copyright © 2011-2022 走看看