LeetCode Basic Calculator II
来源:互联网 发布:java开源微信公众平台 编辑:程序博客网 时间:2024/05/08 14:28
原题链接在这里:https://leetcode.com/problems/basic-calculator-ii/
与Basic Calculator类似。
思路: 扫一遍string,遇见数字时看栈顶是不是 '*' 或者 '/',若不是,就压栈,若是就取出栈顶两个元素算结果,再押回栈。
遇见符号就压栈。
基本就是先算了 乘除运算。
剩下栈里的就是加减运算了。这里注意需用到翻转栈, 使用了 Collections.reverse(stk).
Time O(n), Space O(n).
AC Java:
public class Solution { public int calculate(String s) { if(s == null || s.length() == 0 ){ return Integer.MIN_VALUE; } int res = 0; Stack<Integer> stk = new Stack<Integer>(); for(int i = 0; i<s.length(); i++){ if(Character.isDigit(s.charAt(i))){ int cur = (int)(s.charAt(i)-'0'); while((i+1)<s.length() && Character.isDigit(s.charAt(i+1))){ cur = cur*10 + (int)(s.charAt(i+1) - '0'); i++; } if(!stk.empty() && (stk.peek() == Integer.MIN_VALUE+2 || stk.peek() == Integer.MIN_VALUE+3)){ if(stk.peek() == Integer.MIN_VALUE+2){ stk.pop(); cur = stk.pop()*cur; stk.push(cur); } if(stk.peek() == Integer.MIN_VALUE+3){ stk.pop(); cur = stk.pop()/cur; stk.push(cur); } }else{ stk.push(cur); } }else{ switch(s.charAt(i)){ case '+': stk.push(Integer.MIN_VALUE); break; case '-': stk.push(Integer.MIN_VALUE+1); break; case '*': stk.push(Integer.MIN_VALUE+2); break; case '/': stk.push(Integer.MIN_VALUE+3); break; default: continue; } } } if(stk.empty()) return res; Collections.reverse(stk); //error res = stk.pop(); while(!stk.empty()){ int oper = stk.pop(); int num = stk.pop(); if(oper == Integer.MIN_VALUE){ res += num; }else{ res -= num; } } return res; }}
0 0
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- 【LeetCode】Basic Calculator II
- [Leetcode]Basic Calculator II
- LeetCode Basic Calculator II
- [Leetcode]Basic Calculator II
- leetcode:Basic Calculator II
- leetcode:Basic Calculator II
- Basic Calculator II -- leetcode
- *LeetCode-Basic Calculator II
- leetcode:Basic Calculator II
- LeetCode -- Basic Calculator II
- 《leetCode》:Basic Calculator II
- 【Leetcode】Basic Calculator II
- LeetCode:Basic Calculator II
- leetcode Basic Calculator II
- Leetcode Basic Calculator II
- linux 脚本入门篇
- poj1008
- Android常用UI组件属性和.9图制作
- 8个与php相关的函数
- C#随机数管理,最大值、最小值可以自己进行设定。
- LeetCode Basic Calculator II
- 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
- 逆向初体验之玩“英语趣配音”
- linux查找关键字在php出现的次数
- UIScrollView
- 求一个数组中只出现一次的数字
- 离线安装CM时遇到的问题
- 图论03—任意两点间最短距离及路径(改进)
- UITextfield后面只能输入小数点后2位