p154 简易计算器(leetcode 227)
一:解题思路
这道题可以采用先将字符串转为分离,然后将分离后的字符串转化为后缀表达式,最后根据后缀表达式再计算最后的结果。
也可以不采用上面的方法来做,直接按照下面的方法来做。Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
这道题目有三个关键点:
1.需要知道字符串转化为整数的公式:num = num * 10 + (s[p] - '0');
2.乘法和除法的优先级 比 加法和减法的 优先级要高,乘法和除法只更新:part
4.遇到空格就跳过。
C++:
class Solution { public: int calculate(string s) { int sum = 0; int part = 0; int p = 0; char op = '+'; int n = s.length(); while (p < n) { while (p < n && s[p] == ' ') p++; int num = 0; while (p < n && s[p] >= '0' && s[p] <= '9') { num = num * 10 + (s[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[p] == ' ') p++; if (p < n) op = s[p++]; } return sum + part; } };
Java:
class Solution { public int calculate(String s) { int n=s.length(); int p=0; int sum=0; int part=0; char op='+'; while(p<n) { while(p<n && 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; } }

浙公网安备 33010602011771号