题解
【基础】表达式的值II
1 条题解
-
0
解题思路
题目要求计算一个只含 + 和 - 的表达式。
表达式中没有括号,所以只要从左到右计算就行。
方法:逐字符扫描表达式
- 遇到数字就拼接到当前数字后面(可能有多位数)
- 遇到 + 或 -,就把之前拼好的数字按前面的符号加入结果,然后更新符号
- 循环结束后,再把最后一个数字加上
参考代码
#include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; int ans = 0; int num = 0; int sign = 1; for (int i = 0; i < s.size(); i++) { if (s[i] >= '0' && s[i] <= '9') { // 数字,拼接到当前数字后面 num = num * 10 + (s[i] - '0'); } else { // 遇到运算符,先把前面的数字加到结果 ans = ans + sign * num; num = 0; if (s[i] == '+') sign = 1; else sign = -1; } } // 加上最后一个数字 ans = ans + sign * num; cout << ans << endl; return 0; }复杂度分析
- 时间复杂度:O(N),N 为表达式长度
- 空间复杂度:O(1)
- 1