思路:
分治法。一个输入的表达式。如果只有一个数字那么就取出这个数字返回。如果这个表达式有多个数,那么把这个表达式分成两部分,前面部分和后面部分递归调用自己。
public class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> result=new ArrayList<Integer>();
int idx=0;
int val=0;
while (idx < input.length() && Character.isDigit(input.charAt(idx))) {
val *= 10;
val += input.charAt(idx) - '0';
idx++;
}
if (idx == input.length())
{
result.add(val);
return result;
}
List<Integer> left;
List<Integer> right;
for(int i=0;i<input.length();i++)
{
if(!Character.isDigit(input.charAt(i)))
{
left=diffWaysToCompute(input.substring(0, i));
right=diffWaysToCompute(input.substring(i+1,input.length()));
for(int j=0;j<left.size();j++)
{
for(int k=0;k<right.size();k++)
{
result.add(comput(left.get(j),right.get(k), input.charAt(i)));
}
}
}
}
return result;
}
public int comput(int num1,int num2,char str)
{
int result=0;
switch (str) {
case '+':
result=(num1)+(num2);
break;
case '-':
result=(num1)-(num2);
break;
case '*':
result=(num1)*(num2);
break;
default:
break;
}
return result;
}
}
本文介绍了一种使用分治法解决复杂数学表达式计算问题的方法。通过递归地将输入表达式分解为子表达式,并对每个子表达式进行计算,最终得到所有可能的计算结果。
401

被折叠的 条评论
为什么被折叠?



