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

public class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        //递归思想,遇到运算符,就对左右两边进行递归,然后对结果进行组合
        List<Integer> res=new ArrayList<Integer>();
        for(int i=0;i<input.length();i++){
            char c=input.charAt(i);
            if(!Character.isDigit(c)){
               List<Integer> left=diffWaysToCompute(input.substring(0,i));
               List<Integer> right=diffWaysToCompute(input.substring(i+1));
               for(int k=0;k<left.size();k++){
                   for(int j=0;j<right.size();j++){
                       switch(c){
                           case '+':
                               res.add(left.get(k)+right.get(j));
                               break;
                           case '-':
                               res.add(left.get(k)-right.get(j));
                               break;
                           case '*':
                               res.add(left.get(k)*right.get(j));
                               break;
                           
                       }
                   }
               }
            }
        }
        if(res.isEmpty()) res.add(Integer.valueOf(input));//注意单个数字的输入,比如:1,此时需要特殊判断
        return res;
    }
}

 

posted @ 2015-08-09 00:00  ~每天进步一点点~  阅读(200)  评论(0编辑  收藏  举报