博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode OJ:Evaluate Reverse Polish Notation(逆波兰表示法的计算器)
阅读量:6431 次
发布时间:2019-06-23

本文共 2848 字,大约阅读时间需要 9 分钟。

Evaluate the value of an arithmetic expression in .

Valid operators are +-*/. Each operand may be an integer or another expression.

Some examples:

 

逆波兰表示法计算机,很简单 ,就是一个stack  由符号弹出计算在填入就行了 最后top上的就是计算的最后的结果。

1 class Solution { 2 public: 3     int evalRPN(vector
& tokens) { 4 int sz = tokens.size(); 5 stack
result; 6 int leftEval, rightEval; 7 for (int i = 0; i < sz; ++i){ 8 if (tokens[i].size() == 1 && !isdigit(tokens[i][0])){  //处理应该注意,防止出现负数 9 rightEval = result.top(), result.pop();10 leftEval = result.top(), result.pop();11 switch (tokens[i][0]){12 case '+':13 result.push(leftEval + rightEval);14 break;15 case '-':16 result.push(leftEval - rightEval);17 break;18 case '*':19 result.push(leftEval * rightEval);20 break;21 case '/':22 result.push(leftEval / rightEval);23 break;24 default:25 break;26 }27 }28 else{29 if (tokens[i][0] == '-'){30 result.push(0 - atoi(tokens[i].substr(1, tokens[i].size() - 1).c_str()));31 cout << result.top();32 }33 else34 result.push(atoi(tokens[i].c_str()));35 }36 }37 return result.top();38 }39 };

 java版本的方法具体的和上面的差不多,但是java的栈的api用起来确确实实的要容易很多,代码如下所示:

1 public class Solution { 2     public int evalRPN(String[] tokens) { 3         Stack
s = new Stack
(); 4 for(int i = 0; i < tokens.length; i++){ 5 if(isDigit(tokens[i])){ 6 s.push(Integer.parseInt(tokens[i])); 7 }else{ 8 int right = s.pop();//分别是左右操作数 9 int left = s.pop();10 switch(tokens[i].charAt(0)){11 case '+':12 s.push(left + right);13 break;14 case '-':15 s.push(left - right);16 break;17 case '*':18 s.push(left * right);19 break;20 case '/':21 s.push(left / right);22 break;23 }24 }25 }26 return s.pop();27 }28 29 public boolean isDigit(String str){30 return Character.isDigit(str.charAt(0))||(str.length() > 1);//防止出现-1这种特殊的数字也需要正确的判断31 }32 }

 

转载于:https://www.cnblogs.com/-wang-cheng/p/4886367.html

你可能感兴趣的文章
circle area
查看>>
怎么改变按钮的图标
查看>>
当输入流和输出流同时作用一个文件
查看>>
MySQL关于表碎片整理OPTIMIZE TABLE操作
查看>>
FortiGate 0458版本bug
查看>>
后台post注入爆密码
查看>>
Java --- 多线程 面试题
查看>>
OA项目如何成功实施!
查看>>
FindMaxConsecutive.java
查看>>
面试官问:ZooKeeper 一致性协议 ZAB 原理
查看>>
DNS实现域名正解与反解
查看>>
反向教学系列之——Django入门(一)【不需知道web框架】
查看>>
Linux学习-标准输入输出
查看>>
CentOS 7 配置IP
查看>>
文本处理工具grep及正则表达式
查看>>
Intel VT-x处于禁用状态
查看>>
用什么软件可以修改PDF文件,软件的操作方法
查看>>
如何精简企业主数据“裹脚布”
查看>>
Pointer on C
查看>>
& 号和管道符号(|)在不同场景下的使用方法
查看>>