[LeetCode 227] Basic Calculator II

90 篇文章 0 订阅

原文地址:http://blog.csdn.net/brucehb/article/details/46593913

我:1、当循环中嵌套循环时,要十分注意变量i的值变化。转载的这篇文章中,将i的值完全交由程序中去增减。

2、当判断条件中有长度越界和其他的判断时,要将长度判断放在前边。

3、找个时间研究一下表达式求值。

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

You may assume that the given expression is always valid.

Some examples:

"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5

Note: Do not use the eval built-in library function.

[cpp]  view plain copy
  1. class Solution {  
  2. public:  
  3.     int calculate_help(int left, char symbol, int right)  
  4.     {  
  5.         switch(symbol)  
  6.         {  
  7.             case '*':  
  8.                 return left * right;  
  9.             case '/':  
  10.                 return left / right;  
  11.             default:  
  12.                 return 0;  
  13.         }  
  14.     }  
  15.       
  16.     int calculate(string s) {  
  17.         int n = s.length();  
  18.         if (n < 1)  
  19.         {  
  20.             return 0;  
  21.         }  
  22.   
  23.         int result = 0;  
  24.         stack<int> value;  
  25.         stack<char> symbol;  
  26.         symbol.push('+');  
  27.         for (int i = 0; i < n;)  
  28.         {  
  29.             if (s[i] == '+' || s[i] == '-'  
  30.                 || s[i] == '*' || s[i] == '/')  
  31.             {  
  32.                 symbol.push(s[i]);  
  33.                 i++;  
  34.             }  
  35.             else if (s[i] == ' ')  
  36.             {  
  37.                 i++;  
  38.             }  
  39.             else  
  40.             {  
  41.                 int right = 0;  
  42.                 while (i < n && s[i] <= '9' && s[i] >= '0')  
  43.                 {  
  44.                     right = right*10 + s[i]-'0';  
  45.                     i++;  
  46.                 }  
  47.                 if (!symbol.empty() && (symbol.top() == '*' || symbol.top() == '/'))  
  48.                 {  
  49.                     right = calculate_help(value.top(), symbol.top(), right);  
  50.                     value.pop();  
  51.                     symbol.pop();  
  52.                 }  
  53.   
  54.                 value.push(right);  
  55.             }  
  56.         }  
  57.   
  58.         while (!symbol.empty())  
  59.         {  
  60.             int temp = value.top();  
  61.             if (symbol.top() == '-')  
  62.             {  
  63.                 temp = -temp;  
  64.             }  
  65.             result += temp;  
  66.             value.pop();  
  67.             symbol.pop();  
  68.         }  
  69.   
  70.         return result;  
  71.     }  
  72. };  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值