Advertisement
YEZAELP

LeetCode: Basic Calculator

Nov 17th, 2021
1,067
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     const int inf = 1e9;
  4.    
  5.     int Num(char a){return a - '0';}
  6.    
  7.     bool isNum(char a){return '0' <= a and a <= '9';}
  8.    
  9.     int calculate(string s) {
  10.         int sz = s.size();
  11.         stack <int> st;
  12.         int sign = 1;
  13.         for(int i=0;i<sz;i++){
  14.             if(s[i] == ' ') continue;
  15.             else if(s[i] == '+')
  16.                 sign = 1;
  17.             else if(s[i] == '-')
  18.                 sign = -1;
  19.             else if(isNum(s[i])){
  20.                 int num = 0;
  21.                 for(;i < sz and isNum(s[i]); i++){
  22.                     num = 10 * num + Num(s[i]);
  23.                 }
  24.                 i --;
  25.                 st.push(sign);
  26.                 st.push(num);
  27.             }
  28.             else if(s[i] == '('){
  29.                 st.push(sign);
  30.                 st.push(inf);
  31.                 sign = 1;
  32.             }
  33.             else if(s[i] == ')'){
  34.                 int val = 0;
  35.                 int num = 0;
  36.                 int sign = 1;
  37.                 while(true){
  38.                     num = st.top(); st.pop();
  39.                     sign = st.top(); st.pop();
  40.                     if(num == inf) break;
  41.                     val += num * sign;
  42.                 }
  43.                 st.push(sign);
  44.                 st.push(val);
  45.                 sign = 1;
  46.             }
  47.         }
  48.         int ans = 0;
  49.         while(!st.empty()){
  50.             int num = st.top(); st.pop();
  51.             int sign = st.top(); st.pop();
  52.             ans += num * sign;
  53.         }
  54.         return ans;
  55.     }
  56. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement