424-逆波蘭表達式求值
求逆波蘭表達式的值。
在逆波蘭表達法中,其有效的運算符號包括 +, -, *, / 。每個運算對象可以是整數,也可以是另一個逆波蘭計數表達。樣例
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6標簽
領英 棧
思路
- 利用棧,首先遍歷字符串數組,若遇到操作數,如 "1","23" 等,則將其轉化為整數並入棧
- 若遇到操作符,如 "+","-","*","/",則將棧頂元素與次棧頂元素按操作符進行運算,並將運算結果入棧(棧頂元素與次棧頂元素要彈出棧)
- 最后,字符串數組遍歷結束,棧內唯一的元素即運算結果
code
class Solution {
public:
/*
* @param tokens: The Reverse Polish Notation
* @return: the value
*/
int evalRPN(vector<string> tokens) {
// write your code here
int size = tokens.size();
if (size <= 0) {
return 0;
}
stack<int> stack;
for (int i = 0; i < size; i++) {
if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/") {
stack.push(atoi(tokens[i].c_str()));
}
else {
int num1 = stack.top();
stack.pop();
int num2 = stack.top();
stack.pop();
int num3 = 0;
if (tokens[i] == "+") {
num3 = num2 + num1;
}
else if (tokens[i] == "-") {
num3 = num2 - num1;
}
else if (tokens[i] == "*") {
num3 = num2 * num1;
}
else if (tokens[i] == "/") {
num3 = num2 / num1;
}
stack.push(num3);
}
}
return stack.top();
}
};