递归的思路做这道题....
原表达式中的任意一个符号可以将整个表达式分为两部分,对每一部分分别调用该方法可以得到两部分所有解得集合....我们只需遍历两个集合解的所有关于这个符号的组合加入结果列表中即可....注意:当结果列表为空的时候只可能是表达式中无加减乘符号,直接把表达式当做整数加入即可......
public class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> res=new ArrayList<Integer>();
if( input.length()==0 )
{
return res;
}
for( int i=0;i<input.length();i++ )
{
char c=input.charAt(i);
if( c=='+'||c=='*'||c=='-' )
{
String left=input.substring(0,i);
String right=input.substring(i+1);
List<Integer> list1=diffWaysToCompute(left);
List<Integer> list2=diffWaysToCompute(right);
for( int i1:list1 )
{
for( int i2:list2 )
{
int ans=0;
if( c=='+' )
{
ans=i1+i2;
}
if( c=='-' )
{
ans=i1-i2;
}
if( c=='*' )
{
ans=i1*i2;
}
res.add(ans);
}
}
}
}
if( res.size()==0 )
{
res.add( Integer.parseInt(input) );
}
return res;
}
}