力扣:逆波兰表达式

📅 发布时间:2026/7/28 15:29:32
力扣:逆波兰表达式 根据逆波兰表示法求表达式的值。有效的运算符包括 , -, *, / 。每个运算对象可以是整数也可以是另一个逆波兰表达式。说明整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说表达式总会得出有效数值且不存在除数为 0 的情况。示例 1输入: [2, 1, , 3, *]输出: 9解释: ((2 1) * 3) 9来源力扣LeetCode链接https://leetcode-cn.com/problems/evaluate-reverse-polish-notation#includelk.h using namespace std; //通过流的概念实现字符串数字之间的转换 int str2num(string s) { int num; stringstream ss(s); ss num; return num; } int evalRPN(vectorstring tokens) { vectorint num; vectorstringcum; //把可变数组直接当成栈 for (int i 0; i (int)tokens.size(); i) { if (tokens[i] ) { int a num[num.size() - 1]; num.pop_back(); int b num[num.size() - 1]; num.pop_back(); num.push_back(a b); } else if (tokens[i] -) { int a num[num.size() - 1]; num.pop_back(); int b num[num.size() - 1]; num.pop_back(); num.push_back(b-a); } else if (tokens[i] *) { int a num[num.size() - 1]; num.pop_back(); int b num[num.size() - 1]; num.pop_back(); num.push_back(a * b); } else if( tokens[i] /) { int a num[num.size() - 1]; num.pop_back(); int b num[num.size() - 1]; num.pop_back(); num.push_back(b / a); } else { num.push_back(str2num(tokens[i])); } } //还是从第一个开始排序 return num[0]; } int main() { vectorstringarr { 4,3,- }; coutevalRPN(arr); return 0; }没有什么难度只要想到一个运算符对应两个操作数就行。两个思路一个是暴力运算单纯的检测运算符上面有两个操作数然后一个个求解。另一个就是栈或者vector的可变长度数组都可以。