【LeetCode】基本计算器II
【问题】实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。整数除法仅保留整数部分。
输入: "3+2*2"
输出:
示例 :
输入: " 3/2 "
输出:
【思路】
总体思路来说,我们遍历字符串的每个字符,注意:加减乘除以及空格的ASCII码 < '0'。如果这个字符为数字字符,需要将两个非数字字符之间的不包含空格的字符串变换成数值!
表达式:num = num * 10 - '0' + s[i];
对于非数字字符来说,有三种情况:
'+': 将这个字符后面的数压入堆栈nums中
'-': 将这个字符后面的数取反后压入堆栈nums中
'*' 或 '/': nums.top()为这个符号前面的数,而num为这个符号后面的数,根据符号计算这两个数的值后,再压入堆栈
这样一来,表达式的结果就是最后堆栈内所有数值的和,有一个问题:表达式的第一个值是怎么获取的呢?因为程序中总是将非数字符号后面的值压入堆栈中,但第一个值的前面有符号么?当然有,因为sign的初始化为'+'.
class Solution {
public:
int calculate(string s) {
int res = , num = ;
char sign = '+';
stack<int> nums;
for(int i = ; i < s.size(); i++){
if(s[i] >= ''){
num = num * - '' + s[i]; //要先做减法,否则int型会溢出
}
if((s[i] < '' && s[i] != ' ') || i == s.size() -){
if(sign == '+'){
nums.push(num);
}
else if(sign == '-'){
nums.push(-num);
}
else if(sign == '*' || sign == '/'){
int tmp = sign == '*' ? nums.top() * num : nums.top() / num;
nums.pop();
nums.push(tmp);
}
sign = s[i];
num = ;
}
}
while(!nums.empty()){
res += nums.top();
nums.pop();
}
return res;
}
};
【LeetCode】基本计算器II的更多相关文章
- LeetCode 227. 基本计算器 II(Basic Calculator II)
227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...
- Leetcode 227.基本计算器II
基本计算器II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: " ...
- Java实现 LeetCode 227 基本计算器 II(二)
227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...
- [LeetCode] Palindrome Partitioning II 解题笔记
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- [leetcode]Word Ladder II @ Python
[leetcode]Word Ladder II @ Python 原题地址:http://oj.leetcode.com/problems/word-ladder-ii/ 参考文献:http://b ...
- LeetCode:课程表II【210】
LeetCode:课程表II[210] 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一 ...
- LeetCode:全排列II【47】
LeetCode:全排列II[47] 参考自天码营题解:https://www.tianmaying.com/tutorial/LC47 题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列 ...
- LeetCode:子集 II【90】
LeetCode:子集 II[90] 题目描述 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: ...
- [LeetCode]丑数 II&C++中priority_queue和unordered_set的使用
[LeetCode]丑数 II&C++中priority_queue和unordered_set的使用 考虑到现实因素,LeetCode每日一题不再每天都写题解了(甚至有可能掉题目?--)但对 ...
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
随机推荐
- nginx windows下重新加载配置
运行过程中,有个节点部分服务出现故障,像将其下线修复, 使用nginx -t; nginx -s reload 重新加载配置 得到错误"nginx: [error] OpenEvent(&q ...
- HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历
我们先来做一个测试 public class HashMapTest { private HashMap<String, String> map = new HashMap<> ...
- PAT A1114 Family Property
用并查集处理每个家庭的信息,注意标记~ #include<bits/stdc++.h> using namespace std; ; bool visit[maxn]={false}; i ...
- 泛型DAO模型设计
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKC
- 十二 INPUT逻辑视图的配置,回显错误信息
Action接口中提供了五个逻辑视图的名称 SUCCESS ERROR LOGIN INPUT:input在某些拦截器会使用 NONE 配置逻辑视图:struts_demo2.xml,配置后出现错误信 ...
- ➡️➡️➡️leetcode 需要每天打卡,养成习惯
目录 待完成的 完成的 0204 0203 以前 java 的 ! 的操作 不像 c 那样自由,!不要使用在int 变量上 c ^ 是异或操作 体会:c中,malloc 后的新建的数组,默认不是0(j ...
- Linux命令:tcpdump命令
tcpdump网络抓包工具 格式:tcpdump [options] [表达式] optinos选项 -i any:监听所有网络接口 -i eth0:监听指定的网络接口(eth0) -D:列出所有可用 ...
- xcode app 在iOS13.3.1上崩掉
问题背景: 以前搞的一个项目,昨天测试还好的,今天就无法在iphone上运行了,对比了一下昨天是13.3,今天是13.3.1 其它的没有区别,只要运行就崩,根本没有办法启动. 报错提示: dyld: ...
- git 常用命令记录 -- 快捷&备忘
1.安装 略2.git拉取远程分支 git config user.name git config user.email git config --global user.name xxxx git ...
- uniGUI页面标题和页面背景的更改(03)
---------------------------------------------------------------------------------------------------- ...