leetcode - 150. Evaluate Reverse Polish Notation
前言:记录一下leetcode上的一道题目:
题目网址:https://leetcode.com/problems/evaluate-reverse-polish-notation/description/
问题描述:
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
思路:
- 当前拥有的内容:一个字符串数组,加减乘除,其余都是整数的字符串 可以对此字符数组中的内容进行栈的相关操作,首先创建一个整数类型的栈来放置这些数。
- 如果是整数形式的字符串;就把这个字符串转化成为整数入栈,这是为了便于后边,遇到运算符的时候方便出栈操作,并且再进行后期的入栈操作;
- 如果是运算符号字符串就连续有两次出栈,此处根据示例,确定符号放在谁的前边,做了相应的运算的结果还要再次入栈;
- 就这样,最后得到的会是一个整数。就是我们想要的,最后这个代码虽然是Acceped的但是还是有不足的地方,不能很好处理一些特殊情况。
解题Java代码如下:代码是我从Leetcode的Discuss里,摘抄过来的。网址:https://leetcode.com/problems/evaluate-reverse-polish-notation/discuss/
1 class Solution { 2 public int evalRPN(String[] a) { 3 Stack<Integer> stack = new Stack<Integer>(); 4 5 for (int i = 0; i < a.length; i++) { 6 switch (a[i]) { 7 case "+": 8 stack.push(stack.pop() + stack.pop()); 9 break; 10 11 case "-": 12 //注意"-"和"/"放置的位置 13 stack.push(-stack.pop() + stack.pop()); 14 break; 15 16 case "*": 17 stack.push(stack.pop() * stack.pop()); 18 break; 19 20 case "/": 21 int n1 = stack.pop(), n2 = stack.pop(); 22 if(n1 == 0){ 23 System.out.println("原逆波兰式有误"); 24 } 25 stack.push(n2 / n1); 26 break; 27 28 default: 29 30 stack.push(Integer.parseInt(a[i])); 31 } 32 } 33 return stack.pop(); 34 } 35 }
扩展:
如果是要了解更多的内容,可以看看关于Swift相关的栈操作;据我所知Objective-C没有提供相应的栈的操作方法,Swift的话,有往数组中添加元素,有获取到栈顶的元素的方法,有出栈的方法,但是没有明确的入栈之类的方法,下边的链接给出了相应的Swift的入栈、出栈、判断栈是否为空、计算栈中的元素的个数的相关内容:
https://github.com/raywenderlich/swift-algorithm-club/tree/master/Stack
iOS交流群欢迎你的加入!
群二维码:
先写到这么多
如有问题,敬请指正;
如需转载,请注明出处,谢谢!
转载于:https://www.cnblogs.com/ITCoderW/p/7886334.html
leetcode - 150. Evaluate Reverse Polish Notation相关推荐
- LeetCode 150. Evaluate Reverse Polish Notation
LeetCode 150. Evaluate Reverse Polish Notation Solution1: 参考网址:http://www.cnblogs.com/grandyang/p/42 ...
- Leetcode 之Evaluate Reverse Polish Notation(41)
很简单的一道题,定义一个栈保留操作数,遇操作符则弹出运算即可. bool isOperator(string &op){//注意用法return op.size() == 1 &&am ...
- leetcode day1 -- Reverse Words in a String Evaluate Reverse Polish Notation Max Points on a Li
以前从来没做过什么oj,发现做oj和在本地写代码或者纸上写差别还是很大的,觉得今天开始刷oj,特此记录一下. 1.Reverse Words in a String Given an input st ...
- 计算后续表达式 LectCode之Evaluate Reverse Polish Notation
在记录lectcode这道题目前先说明一下三个相关知识点:前序表达式,中序表达式,后序表达式 前序表达式(Polish Notation 或 Prefix Notation): 前序表达式就是不含括号 ...
- 150 Evaluate Reverse Polish
1题目理解 输入:一个字符串数组.这个字符串数组表示算数运算的逆波兰表示法.一般算数表示方法是2+1,逆波兰表示是2 1 +. 输出:一个int值. Example 1: Input: [" ...
- LeetCode-150-Evaluate Reverse Polish Notation
算法描述: Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...
- Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...
- Reverse Polish Notation
http://www.1point3acres.com/bbs/thread-31595-1-1.html 定义一种叫做"Reverse Polish Notation"的表达式: ...
- [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
题目来源: https://leetcode.com/problems/evaluate-reverse-polish-notation/ 题意分析: 给定一个数组,用这个数组来表示加减乘除,例如 [ ...
最新文章
- MySQL用得好好的,为什么要转ES?
- 快乐学习Pandas入门篇:Pandas基础
- GP官网上的TEE学习课程和费用介绍
- java lock 对象_Java并发编程锁系列之ReentrantLock对象总结
- Frame和Iframe横向滚动条的解决方案
- (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
- C++中void和void*指针的含义 (指针类型的含义)
- LiveWriter测试
- pid和linux的关系,linux – bash pid和$$之间的区别
- 【codevs1281】Xn数列,矩阵乘法练习
- 爱情六十三课,定个开放日
- java xml 面试_Java程序员面试常见的10道XML面试题
- NRF52840学习——GPIO输入,实现按键短按和长按
- 简道云-灵活易用的应用搭建平台
- 5214页PDF的进阶架构师学习笔记,阿里巴巴内部Jetpack宝典意外流出
- animation-delay负值妙用,你不来了解一下吗
- android 9平板电脑截屏,平板电脑怎么截图 平板电脑截图方法【详解】
- canvas画一个渐变色的环形进度环
- “专车”监管意见最快本月公布
- 符咒AA4属性转移模块