Basic Calculator

用sign把算術運算符+ -和單個數前的負號分開了

class Solution {
public:
	int calculate(string s) {
		// the given expression is always valid!!!
		// only + and - !!!
		// every + and - can be flipped base on it's depth in ().
		stack<int> signs;
		int sign = 1;
		int num = 0;
		int ans = 0;

		// always transform s into ( s )
		signs.push(1);

		for (auto c : s) {
			if (c >= '0' && c <= '9') {
				num = 10 * num + c - '0';
			}
			else if (c == '+' || c == '-') {
				ans = ans + signs.top() * sign * num;
				num = 0;
				sign = (c == '+' ? 1 : -1);
			}
			else if (c == '(') {
				signs.push(sign * signs.top());
				sign = 1;
			}
			else if (c == ')') {
				ans = ans + signs.top() * sign * num;
				num = 0;
				signs.pop();
				sign = 1;
			}
		}

		if (num) {
			ans = ans + signs.top() * sign * num;
		}

		return ans;
	}
};


發佈了166 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章