[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; } }