给定一个字符串str,str表示一个公式,公式里可能有整数、加减乘除符号和 左右括号,返回公式的计算结果。
【举例】 str="48*((70-65)-43)+8*1",返回-1816。 str="3+1*4",返回7。 str="3+(1*4)",返回7。
【说明】
1.可以认为给定的字符串一定是正确的公式,即不需要对str做公式有效性检 查。 如"-3*4"和"(-3*4)"都是合法的。
2.如果是负数,就需要用括号括起来,比如"4*(-3)"。但如果负数作为公式的 开头或括号部分的开头,则可以没有括号,比如"-3*4"和"(-3 *4)"都是合法的。
3.不用考虑计算过程中会发生溢出的情况
关键代码,浏览下:
public static int[] value(char[] arr, int i) {
LinkedList<String> plus = new LinkedList<String>();
int bra = 0;
int[] pra = null;
while (arr[i] != ')' && i < arr.length) {
if (arr[i] >= '0' && arr[i] <= '9') {
bra = bra * 10 + arr[i++] - '0';
} else if (arr[i] != '(') { //加减乘除
operator_num(plus, bra);
plus.addLast(String.valueOf(arr[i++]));
bra = 0;
} else {
pra = value(arr, i + 1);
bra = pra[0];
i = pra[1] + 1;
}
}
operator_num(plus, bra);
return new int[] { getNum(plus), i };
}