LeetCode Evaluate Reverse Polish Notation
2015-08-22 01:10
411 查看
原题链接在这里:https://leetcode.com/problems/evaluate-reverse-polish-notation/
思路: 利用栈,遇到数字就压栈,遇到运算符就先pop() op2, 再pop() op1, 按op1 运算符op2 计算,得出结果压回栈,最后站内
剩下的就是结果。
Note: 1.String str to character, use str.toCharArray(), 转化成了一个char的array.
2. 若是负数,首字符也是负号,需要分类讨论
3. while loop, 别忘了j++.
AC Java:
上面的写法显得啰嗦,可以做如下改动。
Note: 1.可以直接使用Integer.valueOf(str)来得到数值。
2. In "if" statement, 比较两个str时,不能使用 == operator,必须使用str1.equals(str2).
3. 当stack使用pop() 或者 peek()时需要先检查stack是否为空。
AC Java:
思路: 利用栈,遇到数字就压栈,遇到运算符就先pop() op2, 再pop() op1, 按op1 运算符op2 计算,得出结果压回栈,最后站内
剩下的就是结果。
Note: 1.String str to character, use str.toCharArray(), 转化成了一个char的array.
2. 若是负数,首字符也是负号,需要分类讨论
3. while loop, 别忘了j++.
AC Java:
public class Solution { public int evalRPN(String[] tokens) { if(tokens == null || tokens.length == 0){ return 0; } int res = 0; Stack<Integer> stk = new Stack<Integer>(); for(int i = 0; i<tokens.length; i++){ char [] charArr = tokens[i].toCharArray(); if(Character.isDigit(charArr[0])){ int cur = (int)(charArr[0] - '0'); int j = 1; while(j<charArr.length && Character.isDigit(charArr[j])){ //error cur = cur*10 + (int)(charArr[j] - '0'); j++; //error } stk.push(cur); }else if(charArr.length > 1 && charArr[0] == '-' && Character.isDigit(charArr[1])){ int cur = (int)(charArr[1] - '0'); int j = 2; while(j<charArr.length && Character.isDigit(charArr[j])){ cur = cur*10 + (int)(charArr[j] - '0'); j++; } stk.push(cur * (-1)); }else if(charArr[0] == '+'){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1+op2); }else if(charArr.length == 1 && charArr[0] == '-' ){ //error int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1-op2); }else if(charArr[0] == '*'){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1*op2); }else if(charArr[0] == '/'){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1/op2); }else{ continue; } } if(!stk.empty()){ res = stk.pop(); } return res; } }
上面的写法显得啰嗦,可以做如下改动。
Note: 1.可以直接使用Integer.valueOf(str)来得到数值。
2. In "if" statement, 比较两个str时,不能使用 == operator,必须使用str1.equals(str2).
3. 当stack使用pop() 或者 peek()时需要先检查stack是否为空。
AC Java:
public class Solution { public int evalRPN(String[] tokens) { if(tokens == null || tokens.length == 0){ return 0; } int res = 0; Stack<Integer> stk = new Stack<Integer>(); for(int i = 0; i<tokens.length; i++){ if(tokens[i].equals("+")){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1+op2); }else if(tokens[i].equals("-")){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1-op2); }else if(tokens[i].equals("*")){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1*op2); }else if(tokens[i].equals("/")){ int op2 = stk.pop(); int op1 = stk.pop(); stk.push(op1/op2); }else{ stk.push(Integer.valueOf(tokens[i])); } } if(!stk.empty()){ res = stk.pop(); } return res; } }
相关文章推荐
- leetcode 150: Evaluate Reverse Polish Notation
- Evaluate Reverse Polish Notation
- c和lua之间互相调用方法
- 设计模式实例(Lua)笔记之七(Decorator模式)
- 设计模式实例(Lua)笔记之六(Adapter模式)
- openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)
- luaplus和c++之间的代码交互
- Evaluating Simple C Expressions
- 设计模式实例(Lua)笔记之五(Bridge模式)
- [leetcode-150]Evaluate Reverse Polish Notation(c++)
- Programming in Lua读书笔记
- lua中关于字符串的操作总结
- lua 创建listview
- 设计模式实例(Lua)笔记之五(Prototype 模式)
- 设计模式实例(Lua)笔记之四(Builder 模式)
- 设计模式实例(Lua)笔记之三(Singleton单例模式)
- 【LeetCode-面试算法经典-Java实现】【151-Evaluate Reverse Polish Notation(计算逆波兰式)】
- 【LeetCode-面试算法经典-Java实现】【150-Evaluate Reverse Polish Notation(计算逆波兰式)】
- 设计模式实例(Lua)笔记之二(AbstractFactory抽象工厂模式)
- 设计模式实例(Lua)笔记之一(Factory Method工厂方法模式)