[关闭]
@geek-sjl 2018-10-31T10:39:13.000000Z 字数 862 阅读 438

18图灵班12-Evaluate Reverse Polish Notation

思路

将操作数入栈,遇到运算符号时从栈中弹出两个操作数执行相应操作,直到栈空。
坑点是操作数前面可能有负号..不能看第一个字符而把它判为一个运算符号..

代码

  1. #include <stack>
  2. class Solution {
  3. public:
  4. int toint(string tmp){
  5. int num=0;
  6. bool isNegative=false;
  7. for(int i=0;i<tmp.size();i++){
  8. if(tmp[i]=='-'){
  9. isNegative=true;
  10. }
  11. else{
  12. num*=10;
  13. num+=tmp[i]-'0';
  14. }
  15. }
  16. return isNegative?-num:num;
  17. }
  18. int evalRPN(vector<string>& tokens) {
  19. stack<int> tmp;
  20. for(int i=0;i<tokens.size();i++){
  21. if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
  22. int num1=tmp.top();
  23. tmp.pop();
  24. int num2=tmp.top();
  25. tmp.pop();
  26. switch(tokens[i][0]){
  27. case '+':{
  28. int nowRes=num1+num2;
  29. tmp.push(nowRes);
  30. break;
  31. }
  32. case '-':{
  33. int nowRes=num2-num1;
  34. tmp.push(nowRes);
  35. break;
  36. }
  37. case '*':{
  38. int nowRes=num2*num1;
  39. tmp.push(nowRes);
  40. break;
  41. }
  42. case '/':{
  43. int nowRes=num2/num1;
  44. tmp.push(nowRes);
  45. break;
  46. }
  47. }
  48. }
  49. else{
  50. int num=toint(tokens[i]);
  51. tmp.push(num);
  52. }
  53. }
  54. return tmp.top();
  55. }
  56. };
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注