Basic Calculator
2015-06-22 15:21
274 查看
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Note: Do not use the eval built-in library function.
程序转自讨论区:https://leetcode.com/discuss/39553/iterative-java-solution-with-stack
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Note: Do not use the eval built-in library function.
程序转自讨论区:https://leetcode.com/discuss/39553/iterative-java-solution-with-stack
public int calculate(String s) { Stack<Integer> stack = new Stack<Integer>(); int result = 0; int number = 0; int sign = 1; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(Character.isDigit(c)){ number = 10 * number + (int)(c - '0'); }else if(c == '+'){ result += sign * number; number = 0; sign = 1; }else if(c == '-'){ result += sign * number; number = 0; sign = -1; }else if(c == '('){ //we push the result first, then sign; stack.push(result); stack.push(sign); //reset the sign and result for the value in the parenthesis sign = 1; result = 0; }else if(c == ')'){ result += sign * number; number = 0; result *= stack.pop(); //stack.pop() is the sign before the parenthesis result += stack.pop(); //stack.pop() now is the result calculated before the parenthesis } } if(number != 0) result += sign * number; return result; }
相关文章推荐
- 标准C++库中的异常类
- 宁次之死
- (译)JavaScript内存泄露
- 《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)
- 第25题:返回字符串中最长数字字符串的长度
- 聊聊HTTPS和SSL/TLS协议
- JS关闭窗口或JS关闭页面的几种代码
- 【剑指offer 面试题17】合并两个排序的链表
- objc_setAssociatedObject、objc_getAssociatedObject
- 求高精度幂
- 一些基本属性随笔(不定时更新)
- photoshop画矩形款
- Using Gazebo plugins with ROS
- spi-奇怪的全双工方式
- Firebug入门指南(转)
- monoid之含义
- 前端bootstrap和jquery使用记录
- 伟大程序员的十大特质
- codeforces 549B B. Looksery Party(构造)
- WebGL中的OpenGL着色器语言