逆波兰表达式求值 发表于 2022-08-14 | 分类于 算法 , 栈 , 逆波兰表达式 | 逆波兰表达式求值 150. 逆波兰表达式求值123456789101112131415161718192021222324252627282930class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> stk; int n=tokens.size(); for(int i=0;i<n;i++){ if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/"){ int num2 = stk.top(); stk.pop(); int num1 = stk.top(); stk.pop(); if(tokens[i]=="+"){ stk.push(num1+num2); } if(tokens[i]=="-"){ stk.push(num1-num2); } if(tokens[i]=="*"){ stk.push(num1*num2); } if(tokens[i]=="/"){ stk.push(num1/num2); } }else{ //数字入栈 stk.push(stoi(tokens[i])); } } return stk.top(); }}; 12345678910111213141516171819202122232425262728func evalRPN(tokens []string) int { stk := []int{} // 用切片模拟栈 n := len(tokens) for i := 0; i < n; i++ { if tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/" { num2 := stk[len(stk)-1] stk = stk[:len(stk)-1] num1 := stk[len(stk)-1] stk = stk[:len(stk)-1] if tokens[i] == "+" { stk = append(stk, num1+num2) } if tokens[i] == "-" { stk = append(stk, num1-num2) } if tokens[i] == "*" { stk = append(stk, num1*num2) } if tokens[i] == "/" { stk = append(stk, num1/num2) } } else { // 数字入栈 num, _ := strconv.Atoi(tokens[i]) stk = append(stk, num) } } return stk[len(stk)-1]} -------------本文结束 感谢阅读------------- 本文作者: HReina 本文链接: http://hreina.com/2022/08/14/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!