(Stack)Basic Calculator I && II
Basic Calculator I
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.
参考leetcode的解法:
// "(1+(4+5+2)-3)+(6+8)" = 23
public static int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
int sign = 1; //表示正负
int number = 0; //存储数值
int result = 0;
for(int i = 0; i<s.length(); i++){
char c = s.charAt(i);
switch (c) {
//遇到运算符时,把前面的数值带上其前面的运算符加到结果上
case '+':
result += sign * number;
number = 0;
sign = 1;
break;
case '-':
result += sign * number;
number = 0;
sign = -1;
break;
case '(': //c='('时相当于开始一个新表达式,把原来的结果和符号存入栈中
stack.push(result);
stack.push(sign);
result = 0;
sign = 1;
number = 0;
break;
case ')': //把当前的表达式结果运算完,加上符号累加到原来的结果
result += sign * number;
result *= stack.pop();
result += stack.pop();
number = 0;
break;
case ' ':
break;
default:
number = number * 10 + (c - '0');
break;
}
}
if(number != 0)
result += sign * number;
return result;
}
Basic Calculator II
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
Note: Do not use the eval built-in library function.
参考leetcode的解法:
// 1+2*3
public static int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
char sign = '+';
int number = ;
int result = ;
for(int i=; i<s.length(); i++){
char c = s.charAt(i);
if(Character.isDigit(s.charAt(i))){ //读取数值
number = number * + c - '';
}
//当字符为运算符或者到达表达式末尾时
if(!Character.isDigit(c) && ' ' != c || i == s.length() - ){
switch (sign) { //判断前一个运算符,跟I的本质区别
case '+':
stack.push(number);
break;
case '-':
stack.push(-number);
break;
case '*': //当上一个运算符为*或者/,取出栈顶数进行运算后再放入栈中
stack.push(stack.pop()*number);
break;
case '/':
stack.push(stack.pop()/number);
break;
}
number = ;
sign = c;
}
}
for(Integer i : stack){
result += i;
}
return result;
}
(Stack)Basic Calculator I && II的更多相关文章
- Basic Calculator I && II && III
Basic Calculator I Implement a basic calculator to evaluate a simple expression string. The expressi ...
- leetcode 224. Basic Calculator 、227. Basic Calculator II
这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...
- 【LeetCode】227. Basic Calculator II
Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...
- [LeetCode] Basic Calculator & Basic Calculator II
Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...
- Basic Calculator - Stack(表达式计算器)
978. Basic Calculator https://www.lintcode.com/problem/basic-calculator/description public class Sol ...
- LeetCode OJ Basic Calculator II
Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...
- LeetCode 227. 基本计算器 II(Basic Calculator II)
227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...
- 【LeetCode】227. Basic Calculator II 解题报告(Python)
[LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...
- [LeetCode] Basic Calculator II 基本计算器之二
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
随机推荐
- jquery绑定事件on的用法
语法 $(selector).on(event,childSelector,data,function,map) 参数 描述 event 必需.规定要从被选元素移除的一个或多个事件或命名空间.由空格分 ...
- (转)利用ant在Mac 下自动化打包签名Android程序
1.创建一个android项目 参数说明:-k /--package 为命名空间(包名)-a /--name 工程名-p /--path 项目 -t 为目标平台的版本编号 命令:./android c ...
- [Angular 2] Property Binding
Property Binding is bind property NOT attribute! import {Component, Input, Output, EventEmitter} fro ...
- [Angular 2] Simple intro Http
To use http, we need to import the HTTP_PROVIDER, so that we can inject http to other component: imp ...
- 使用boost中的线程池
#include <boost/thread/thread.hpp>#include <boost/bind.hpp>#include <iostream> u ...
- HID Keyboard & Mouse descriptor.
在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID ...
- Cortex-mo指令集
处理器使用的是ARMv6-M Thumb指令集,包括大量的32位的使用Thumb-2技术的指令.表7-22列出了Cortex-M0指令和它们的周期数.周期计数以零等待状态的系统为基准. 表7-22 ...
- c - 字符串长度.
//字符串的长度. int lenOfStr(char *s) { char *p = s; ; while(*p++) len++; return len; }
- How to start the Virtualbox VMs under terminal
Since we have servral machine on my testbed(fedora), and if I need start some VMs on that, I have to ...
- CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况
//CGRectInset 将原来的矩形放大或者缩小,正表示缩小,-表示放大. CGRect rect= CGRectMake(20, 50, 100, 80); CGRect rect1=CGRec ...