nikunjsoni

224

Jul 2nd, 2021 (edited)
72
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Solution {
  2. public:
  3.     int calculate(string s) {
  4.         long long int result=0;
  5.         long long int num=0, sign=1;
  6.         stack<long long int> nums, ops;
  7.        
  8.         for(int i=0; i<s.size(); ++i){
  9.             char c=s[i];
  10.             if(c>='0' && c<='9'){
  11.                 num=10*num + c-'0'; /// For case: "23"
  12.             }else if(c=='+'){
  13.                 result += num*sign; /// everytime meets an operator, sum up previous number
  14.                 num=0;
  15.                 sign=1;    /// sign is the sign of next number
  16.             }else if(c=='-'){
  17.                 result += num*sign; /// everytime meets an operator, sum up previous number
  18.                 num=0;
  19.                 sign=-1;
  20.             }else if(c=='('){
  21.                 nums.push(result); /// ...(1+3+(..xx..)+...)... before go into cur (..xx..), record the forefront result (in this case it is 1+3 ) into nums array    
  22.                 ops.push(sign);  // record cur (..xx..) sign
  23.                 result=0;  // result is to record the total value in the cur (..xx..)
  24.                 sign=1;
  25.             }else if(c==')' && ops.size()){
  26.                 result += num*sign; /// For case: 1-(5)
  27.                 num=0;
  28.                 result = result*ops.top() + nums.top();  // ...(1+3+(..xx..)+...)... sum up cur (..xx..)  and the forefront result (in this case it is 1+3 )
  29.                 nums.pop();
  30.                 ops.pop();
  31.             }
  32.         }
  33.         result += num*sign; /// For the last one operation. consider the case:  1+2+3
  34.         return result;
  35.     }
  36. };
  37.  
  38. -----------------------------
  39.  
  40. class Solution {
  41. public:
  42.     int calculate(string s) {
  43.         int n = s.size(), ret = 0, sign = 1;
  44.         stack<int> stk;
  45.        
  46.         for (int i = 0; i < n; i++) {
  47.             if (isdigit(s[i])) {
  48.                 int num = s[i] - '0';
  49.                
  50.                 while (i + 1 < n && isdigit(s[i + 1])) {
  51.                     num = num * 10 + (s[i + 1] - '0');
  52.                     i++;
  53.                 }
  54.                
  55.                 ret += sign * num;
  56.             } else if (s[i] == '+') {
  57.                 sign = 1;
  58.             } else if (s[i] == '-') {
  59.                 sign = -1;
  60.             } else if (s[i] == '(') {
  61.                 stk.push(ret);
  62.                 stk.push(sign);
  63.                 ret = 0;
  64.                 sign = 1;
  65.             } else if (s[i] == ')') {
  66.                 ret *= stk.top();
  67.                 stk.pop();
  68.                 ret += stk.top();
  69.                 stk.pop();
  70.             }
  71.         }
  72.        
  73.         return ret;
  74.     }
  75. };
RAW Paste Data