依旧栈的经典应用。
题目链接:https://leetcode.cn/problems/basic-calculator-ii/description/
优秀题解:https://leetcode.cn/problems/basic-calculator-ii/solutions/91271/chai-jie-fu-za-wen-ti-shi-xian-yi-ge-wan-zheng-ji-/
解题思路:
使用栈来处理运算符优先级。乘除立即计算,加减先压入栈,最后处理栈中剩余加减运算。
代码实现实例
int calculate(char* s) { int len = strlen(s); int* stack = (int*)malloc(len * sizeof(int)); int top = -1; int num = 0; char sign = '+'; for (int i = 0; i < len; i++) { if (isdigit(s[i])) { num = num * 10 + (s[i] - '0'); } if ((!isdigit(s[i]) && s[i] != ' ') || i == len - 1) { if (sign == '+') { stack[++top] = num; } else if (sign == '-') { stack[++top] = -num; } else if (sign == '*') { stack[top] *= num; } else if (sign == '/') { stack[top] /= num; } sign = s[i]; num = 0; } } int result = 0; while (top != -1) { result += stack[top--]; } free(stack); return result; }