不用考虑括号不括号的问题 想成了stack就错了 应该用分治递归
每次遇到一个运算符就把string两边分开分别递归计算 得到两个list 然后这两个list里面的结果根据这个符号排列组合计算
最后corner case是不存在括号 即list为空 直接把string add进去
public class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> list = new ArrayList<Integer> ();
if ( input == null || input.length() == 0 )
return list;
for ( int i = 0; i < input.length(); i ++ ){
if ( input.charAt(i) == '+' || input.charAt(i) == '-' || input.charAt(i) == '*' ){
List<Integer> l1 = diffWaysToCompute( input.substring( 0, i ) );
List<Integer> l2 = diffWaysToCompute( input.substring( i + 1 ) );
for ( int num1 : l1 ){
for ( int num2 : l2 ){
int res = 0;
if ( input.charAt(i) == '+' )
res = num1 + num2;
else if ( input.charAt(i) == '-')
res = num1 - num2;
else
res = num1 * num2;
list.add ( res );
}
}
}
}
if ( list.size () == 0 )
list.add ( Integer.parseInt(input) );
return list;
}
}