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的更多相关文章

  1. Basic Calculator I && II && III

    Basic Calculator I Implement a basic calculator to evaluate a simple expression string. The expressi ...

  2. leetcode 224. Basic Calculator 、227. Basic Calculator II

    这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...

  3. 【LeetCode】227. Basic Calculator II

    Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...

  4. [LeetCode] Basic Calculator & Basic Calculator II

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  5. Basic Calculator - Stack(表达式计算器)

    978. Basic Calculator https://www.lintcode.com/problem/basic-calculator/description public class Sol ...

  6. LeetCode OJ Basic Calculator II

    Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...

  7. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

  8. 【LeetCode】227. Basic Calculator II 解题报告(Python)

    [LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...

  9. [LeetCode] Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

随机推荐

  1. javascript 中 nodeValue 、value 、text 的区别

     nodeValue: 属性设置或者返回某节点的值: 也可以改变某个文本节点的值, node.nodeValue eg: 如何获取p元素里面的文本内容 <p id="demo" ...

  2. 听说每天都要写随笔,word哥~

    今天主要学习了html的基本知识,进制的转换,无序列表,有序列表和表格,都是很基本的东西,然后自己自习了表单. <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  3. CentOS启动MySQL服务失败

    :: mysqld_safe Starting mysqld daemon with databases from /data/mysql :: [Warning] Can't create test ...

  4. [ES6] Rest Parameter

    Problem with the ES5: function displayTags(){ for (let i in arguments) { let tag = arguments[i]; _ad ...

  5. POJ 2502 Subway(迪杰斯特拉)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6692   Accepted: 2177 Descriptio ...

  6. android SlidingTabLayout实现ViewPager页卡滑动效果

    先来张效果图(能够滑动切换页卡) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVuZ2t2/font/5a6L5L2T/fontsize/400/fi ...

  7. speex的基本编码和解码流程

    最近在研究speex的编码和解码流程 之前在IM上用到的都是发语音片段,这个很简单,只需要找到googlecode上gauss的代码,然后套一下就可以用了. 不过googlecode要关闭,有人将他导 ...

  8. Java基础知识强化64:基本类型包装类的引入

    1. 基本类型包装类概述 (1)将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据. (2)常用的操作的之一:用于基本数据类型与字符串之间的转换. (3)基本类型和包装类的对应 ...

  9. tomcat端口号、日志、启停

    cd到tomcat目录下 1.[root@rusky bin]# ./shutdown.sh         关闭tomcat 2.[root@rusky bin]# ./startup.sh     ...

  10. http发送post请求

    package com.j1.soa.resource.member.oracle.service; import java.io.BufferedReader; import java.io.IOE ...