LeetCode in Net

224. Basic Calculator

Hard

Given a string s representing a valid expression, implement a basic calculator to evaluate it, and return the result of the evaluation.

Note: You are not allowed to use any built-in function which evaluates strings as mathematical expressions, such as eval().

Example 1:

Input: s = “1 + 1”

Output: 2

Example 2:

Input: s = “ 2-1 + 2 “

Output: 3

Example 3:

Input: s = “(1+(4+5+2)-3)+(6+8)”

Output: 23

Constraints:

Solution

public class Solution {
    public int Calculate(string s) {
        Stack<int> st = new Stack<int>();
        int ans = 0;
        int sum = 0;
        int sign = 1;
        st.Push(1);
        foreach (char ch in s) {
            if (ch >= '0' && ch <= '9') {
                sum = sum * 10 + ch - '0';
            } else if (ch == '(') {
                st.Push(sign);
            } else if (ch == ')') {
                st.Pop();
            } else if (ch == '-' || ch == '+') {
                ans += sum * sign;
                if (ch == '-') {
                    sign = -1 * st.Peek();
                } else {
                    sign = st.Peek();
                }
                sum = 0;
            }
        }
        ans += sum * sign;
        return ans;
    }
}