題目
/***
* 基本計算器
* https://leetcode-cn.com/problems/basic-calculator/
* 實現一個基本的計算器來計算一個簡單的字符串表達式的值。
* 思路:
* 從左往右遍歷
* 如果是數字(考慮多多位數)
* 例如 678 --> 0 * 10 + 6 = 6 ---> 6 * 10 + 7 = 67 ---> 67 * 10 + 8 = 678
* 即 operand = operand * 10 + (int) (charStr - '0');
* 如果遇到 ' ( ' 就 把之前計算結果和正負號 push 進棧 , 遇到 ')' 取出之前結果, 出棧累加
*
*/
Java實現
public static int calculate(String s) {
Stack<Integer> stack = new Stack<>();
int operand = 0; // 記錄多位數
int result = 0; // 結果
int sign = 1; // 記錄正負號
for (int i = 0; i < s.length(); i++) {
char charStr = s.charAt(i);
if (Character.isDigit(charStr)) { // 如果是數字
operand = operand * 10 + (int) (charStr - '0');
} else if (charStr == '+') {
result += sign * operand;
sign = 1;
operand = 0;
} else if (charStr == '-') {
result += sign * operand;
sign = -1;
operand = 0;
} else if (charStr == '(') {
// 把之前的結果和正負符號 存入棧
stack.push(result);
stack.push(sign);
result = 0;
sign = 1;
} else if (charStr == ')') {
// 計算括號內的結果
result += sign * operand;
// 取出小括號之前的符號
int tempSign = stack.pop();
// 取出之前的結果 * 正負號
result = stack.pop() + result * tempSign;
//復位
operand = 0;
}
}
return result + sign * operand;
}