evaluate-reverse-polish-notation
来源:互联网 发布:淘宝客怎么生成优惠券 编辑:程序博客网 时间:2024/06/14 10:35
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
下面代码在牛客网没有通过,但是感觉逻辑是对的,在vs里也输入了几个例子进行了测试,不知道没有通过的原因是不是我写的太繁琐了。
思路:定义一个栈存放数字,如果遇到运算符,就取栈最上层的两个数进行运算,然后再将运算结果压入栈。
代码:
class Solution {public: int evalRPN(vector<string> &tokens) { if (tokens.size()<=0) return 0; stack<int> st; int a = 0, b = 0, res = 0; for (int i = 0; i < tokens.size(); ++i) { string cur = tokens[i]; if (!isoperator(tokens[i]) && !isnumber(tokens[i])) return 0; if (isnumber(cur)) st.push(strtoint(cur)); else if (isoperator(cur)) { b = st.top();//先取到的是第二个操作数 st.pop(); a = st.top(); st.pop(); res = computab(a, b, cur); st.push(res); } } return res; } //执行运算符的操作 int computab(int a, int b, string operate) { if (operate[0] == '+') return a + b; else if (operate[0] == '-') return a - b; else if (operate[0] == '*') return a * b; else if (operate[0] == '/') return a / b; return 0; } //判断是否是运算符 bool isoperator(string x) { if (x.size() == 1 && (x[0] == '+' || x[0] == '-' || x[0] == '*' || x[0] == '/')) return true; else return false; } //判断是否是数字 bool isnumber(string x) { if (x.size() <= 0) return false; for (int i = 0; i < x.size(); ++i) { if (x[i] >= '0' && x[i] <= '9') continue; else return false; } return true; } //把字符串里的数字转换成int int strtoint(string x) { if (x.size() <= 0) return 0; int res = x[0] - '0'; for (int i = 1; i < x.size(); ++i) { res = res * 10 + (x[i] - '0'); } return res; }};
字符串里的数字转换成int的两种写法
1、一位一位转换
int strtoint(string x) { if (x.size() <= 0) return 0; int res = x[0] - '0'; for (int i = 1; i < x.size(); ++i) { res = res * 10 + (x[i] - '0'); } return res; }
2、用stringstream
stringstream ss; ss << str; int temp; ss >> temp;//注意这里别写成temp>>ss cout << temp << endl;
阅读全文
0 0
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- opencv在windows7 vs20…
- #include<>和#include""的区别(转…
- opencv在vs2010下的安装和使用
- 应用程序无法正常启动(0xc00…
- 串口发送速度实测
- evaluate-reverse-polish-notation
- Win7、VS2008、OpenCV2.3.1 …
- 将Windows本机的thinkPHP项目上传到Linux服务器(阿里云服务器)
- Win7、VS2008、OpenCV2.3.1 …
- win7 64位环境下VS2010配置Op…
- 自定义std::sort的比较函数时发生"…
- go http server读书笔记
- sor排序函数
- opencv读取摄像头或视频文件