[LeetCode]Different Ways to Add Parentheses

这道题纠结了两个小时,最开始的想法很麻烦,比如2*3-4*5, 我先分别把所有的一次操作的可能算出来, 变成6-4*5, 2*-1*5, 2*3-20,结果发现实现起来代码复杂度巨高,因为要处理*-这个情况,而且还会出现重复的情况。

后来看了网上的思路,其实就可以对于每一个符号做一个分治就好,代码也很简单。一定要想的非常非常明白再动笔!

public class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        List<Integer> result = new ArrayList<Integer>();
        boolean flg = true;
        for (int i = 0; i < input.length(); i++) {
            char tmp = input.charAt(i);
            if (tmp == '+' || tmp == '-' || tmp == '*') {
                flg = false;
                List<Integer> left = diffWaysToCompute(input.substring(0, i));
                List<Integer> right = diffWaysToCompute(input.substring(i + 1));
                for (int num1 : left) {
                    for (int num2 : right) {
                        if (tmp == '+') {
                            result.add(num1 + num2);
                        } else if (tmp == '-') {
                            result.add(num1 - num2);
                        } else {
                            result.add(num1 * num2);
                        }
                    }
                }
            }
        }
        if (flg) {
            result.add(Integer.valueOf(input));
        }
        return result;
    }
}

 

posted @ 2015-11-30 09:21  Weizheng_Love_Coding  阅读(185)  评论(0编辑  收藏  举报