什么网站可以找到做餐饮的会计,seo营销论文,郑州做响应式网站,做写手一般上什么网站1. 题目解析
题目链接#xff1a;150. 逆波兰表达式求值 这个问题的理解其实相当简单#xff0c;只需看一下示例#xff0c;基本就能明白其含义了。
2.算法原理
数据结构选择#xff1a; 使用栈#xff08;stackint#xff09;来存储操作数#xff0c;以便进…1. 题目解析
题目链接150. 逆波兰表达式求值 这个问题的理解其实相当简单只需看一下示例基本就能明白其含义了。
2.算法原理
数据结构选择 使用栈stackint来存储操作数以便进行后进先出LIFO的操作。使用哈希映射mapstring, functionint(int, int)来存储操作符及其对应的操作函数。操作符函数映射 通过map容器建立操作符到操作函数的映射使得在遍历表达式时能够快速找到对应的操作符函数。遍历表达式 遍历输入的逆波兰表达式RPN中的每一个标记tokens。操作符处理 如果当前标记是操作符则从栈中弹出两个操作数右操作数在前左操作数在后。使用哈希映射中对应的操作函数对这两个操作数进行计算并将结果压回栈中。操作数处理 如果当前标记是操作数则将其转换为整数stoi(s)并压入栈中。结果返回 遍历结束后栈中只剩下一个元素即逆波兰表达式的计算结果返回该元素作为函数结果。注意事项 本算法假设输入的逆波兰表达式是有效的即不包含无效的操作符、操作数以及除法运算中的零除错误。逆波兰表达式的特点是操作符在操作数之后因此不需要考虑操作符的优先级问题。
3.代码编写
class Solution
{
public:int evalRPN(vectorstring tokens) {stackint st;mapstring, functionint(int, int) opfunc{{, [](int x, int y){return x y;}},{-, [](int x, int y){return x - y;}},{*, [](int x, int y){return x * y;}},{/, [](int x, int y){return x / y;}}};for(auto s : tokens){if(opfunc.find(s) ! opfunc.end()){int r st.top();st.pop();int l st.top();st.pop();st.push(opfunc[s](l, r));}else{st.push(stoi(s));}}return st.top();}
};
The Last
嗯就是这样啦文章到这里就结束啦真心感谢你花时间来读。
觉得有点收获的话不妨给我点个赞吧
如果发现文章有啥漏洞或错误的地方欢迎私信我或者在评论里提醒一声~