LeetCode -- Evaluate Reverse Polish Notation
2015-10-17 00:38
471 查看
题目描述:
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
算是一个经典题目,就是执行一个逆波兰表达式。
思路:
1. 使用操作符栈,操作数栈。
解析tokens的过程中,如果token[i]是操作符:
a. 操作数栈中没有元素,操作符入栈
b. 操作数栈有元素,弹出最上两个与该操作符计算,结果入操作数栈
2. 如果token[i]操作数,直接入操作数栈
3. 如果解析完毕后,操作符栈还有操作符,一一弹出并计算(弹1个操作符,两个操作数),结果入操作符栈
4. 弹出操作符栈的最后元素,即为计算结果。
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
算是一个经典题目,就是执行一个逆波兰表达式。
思路:
1. 使用操作符栈,操作数栈。
解析tokens的过程中,如果token[i]是操作符:
a. 操作数栈中没有元素,操作符入栈
b. 操作数栈有元素,弹出最上两个与该操作符计算,结果入操作数栈
2. 如果token[i]操作数,直接入操作数栈
3. 如果解析完毕后,操作符栈还有操作符,一一弹出并计算(弹1个操作符,两个操作数),结果入操作符栈
4. 弹出操作符栈的最后元素,即为计算结果。
public class Solution { public int EvalRPN(string[] tokens) { var stNo = new Stack<int>(); var stOp = new Stack<char>(); for(var i = 0;i < tokens.Length; i++){ if(IsOp(tokens[i])){ if(stNo.Count == 0){ stOp.Push(tokens[i][0]); } else{ var n1 = stNo.Pop(); var n2 = stNo.Pop(); stNo.Push(Calc(n1, n2, tokens[i][0])); } } else{ stNo.Push(int.Parse(tokens[i])); } } while(stOp.Count > 0){ var op = stOp.Pop(); var n1 = stNo.Pop(); var n2 = stNo.Pop(); stNo.Push(Calc(n1, n2, op)); } return stNo.Pop(); } private int Calc(int n1 , int n2, char op) { switch(op) { case '+': return n2 + n1; case '-': return n2 - n1; case '*': return n2 * n1; case '/': return n2 / n1; default: throw new NotSupportedException(); } } private bool IsOp(string str) { if(str == "+" || str == "-" || str == "*" || str == "/") { return true; } return false; } }
相关文章推荐
- LeetCode OJ:Evaluate Reverse Polish Notation(逆波兰表示法的计算器)
- leetcode笔记:Evaluate Reverse Polish Notation(逆波兰式的计算)
- Lua ---- LFS库的使用
- LuaManager实现
- LuaComponent脚本实现
- c++ 与 lua的关系
- casperjs中evaluate() thenEvaluate()的讲解及使用方法
- lua语法学习2
- Lua文件加密
- Lua中string.format转义符的使用
- Lua栈操作详解
- lua 调用 java oc
- Lua 入门学习
- lua调用c函数
- opentesty--luasocket 安装
- ngx lua
- 关于quick里面报SIGSEGV(SEGV_MAPERR) libgame.so lua_gettop错误
- lua中字符串匹配笔记
- lua string库
- c调用lua函数