P177 简易计算器
算法 19 阅读
信号摘要
难度:Medium · 时长:08:20 · leetcode 227 · lintcode 980
未对外公开播放权限
点击查看说明
描述
这个题目说的是,给你一个字符串表达式,你要实现一个简易计算器,对它进行求值。
表达式中只包含非负整数, +、-、*、/ 运算符以及空格。表达式中的除法使用整数除法,即两数相除只取整数部分。
注意,给出的表达式总是有效的,并且不允许使用内置的字符串求值函数。
比如说,给你的表达式为:"1+3 + 2*6 / 3 - 2"
这个表达式求值结果等于 6,因此你要返回 6。
代码
public class AlgoCasts {
// Time: O(n), Space: O(1)
public int calculate(String s) {
int p = 0, n = s.length();
int sum = 0, part = 0;
char op = '+';
while (p < n) {
while (s.charAt(p) == ' ') ++p;
int num = 0;
while (p < n && s.charAt(p) >= '0' && s.charAt(p) <= '9') {
num = num * 10 + s.charAt(p) - '0';
++p;
}
if (op == '+') {
sum += part;
part = num;
} else if (op == '-') {
sum += part;
part = -num;
} else if (op == '*') {
part *= num;
} else {
part /= num;
}
while (p < n && s.charAt(p) == ' ') ++p;
if (p < n) op = s.charAt(p++);
}
return sum + part;
}
}