Q227 Basic Calculator II
/*
看的答案,设置一个符号变量记录这个数前边的符号是什么,不同的符号进行不同的操作。这点自己想到了。
没想到的是由于乘除相当于一个优先级高的线程,所以要先处理,还有存取前一个乘数或者分子,应该怎么办。
答案用的是stack,利用先进后出的特点,当是乘除法时pop出前一个数,处理完乘除后再存取。
所以,以后遇到经常遇到前一个数值且不能在此次循环中及时处理时,可以用stack存取。
这里不能及时处理比如此题中处理完一连串乘除后才能加到最后结果上。虽然可以用list,但是应该比较麻烦
*/
//第一个数前边的符号默认是+
char sign = '+';
int res = 0;
//定义stack
Stack<Integer> stack = new Stack<>();
int l = s.length();
//可能有多位数,作为临时变量
int num = 0;
for (int i = 0;i < l;i++)
{
char c = s.charAt(i);
//这位是数的情况,如果连续式数,那么要把所有数组合为一个数
if (Character.isDigit(c))
{
//提取数字char真值的方法(不是char的ascii码):c - '0';
num = num*10 + c-'0';
}
//这一位是符号的情况,注意如果是最后一位那么也要处理,因为逻辑是遇到符号才计算前边的数,但是后一位后边没有符号
if (!Character.isDigit(c) && c != ' ' || i == l-1)
{
//根据这个数前边的符号进行不同操作
if (sign == '+')
stack.push(num);
if (sign == '-')
stack.push(-num);
if (sign == '*')
stack.push(stack.pop()*num);
if (sign == '/')
stack.push(stack.pop()/num);
num = 0;
//记录下这个符号,作为下一个数前边的符号
sign = c;
}
//空格跳过,不做任何操作
}
for (int n:stack)
res += n;
return res;
Q227 Basic Calculator II的更多相关文章
- Basic Calculator,Basic Calculator II
一.Basic Calculator Total Accepted: 18480 Total Submissions: 94750 Difficulty: Medium Implement a bas ...
- 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 ...
- 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 ...
- Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
随机推荐
- volatile禁止重排使用场景与单例模式的Double Check Lock
普通单例模式Demo public class Demo{ private static Demo INSTANCE; private Demo(){} public static Demo getI ...
- CentOS7.X 挂载磁盘 与Mysql 自动备份
1.前言 搞了好几天终于弄了出来,简单记录一下.注意以下教程是在测试服务器基础上编写 如数据盘含有数据切勿使用此教程,如对命令行不熟悉的 不建议搞哈 .本文中的磁盘/dev/sdb为笔者测试服务器上的 ...
- Docker 与 Podman 容器管理的比较
翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...
- Spring Cloud 学习 (一) Eureka
微服务的功能主要有以下几个方面: 服务的注册和发现 服务的负载均衡 服务的容错 服务网关 服务配置的统一管理 链路追踪 实时日志 服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息 ...
- java并发编程实战《三》互斥锁(上)
互斥锁(上):解决原子性问题 原子性问题的源头是线程切换,操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换. 在早期单核 CPU 时代,这个方案的确是可行的,而且 ...
- moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- PyQt学习随笔:ListView控件增加列表项
ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() ...
- 什么是VIP?什么是IP漂移?
IP地址和MAC地址 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address.事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是 ...
- Cookie 和JWT 并存同一项目代码记录
Cookie管理后台管理,JWT对外提供接口验证 具体官方文档链接 使用 ASP.NET Core 中的特定方案授权 实现思路: 1.添加两种授权方式配置, AddAuthentication 的参数 ...
- Java集合源码分析(四)——Vector
简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...