两年前的面试题,早上突然想起来,写下算法
有两点需要注意的
- Integer.parseInt方法可以将字符串“-2”解析成负数,不需要特殊处理
- 从前向后遍历比较麻烦,换种思路,从后向前遍历,可以直接得到我们要的数字
public static void main(String[] args) {
String input = new String("-1+2+3-4+5+7");
Integer result = 0;
// 从后向前遍历
Integer index = getMaxIndex(input);
while (input.length() != 0) {
if (index == -1) {
result = result + Integer.parseInt(input);
break;
}
int parseInt = Integer.parseInt(input.substring(index));
result = parseInt + result;
input = input.substring(0, index);
index = getMaxIndex(input);
}
System.out.println(result);
}
private static Integer getMaxIndex(String input) {
int plusPoint = input.lastIndexOf("+");
int reducePoint = input.lastIndexOf("-");
return Math.max(plusPoint, reducePoint);
}