LeetCode224——Basic Calculator
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.
实现:
void skipws(string &s, int * beg, bool b = false)
{
if (b) {
while (s[*beg] == ' ') {
(*beg)++;
}
} else {
while (s[*beg] == ' ' || s[*beg] == '(' || s[*beg] == ')') {
(*beg)++;
}
}
}
int numend(string &s, int beg)
{
while (s[beg] >= '0' && s[beg] <= '9') {
beg++;
}
return beg;
}
int parenthesisend(string& s, int beg){
int brace = 0;
while (s[beg] != ')' || brace != 0) {
if (s[beg] == '(') {
brace++;
} else if (s[beg] == ')') {
brace--;
}
beg++;
}
return beg;
}
int calculate(string s) {
int start = 0;
int result = 0;
while (start < s.size()) {
skipws(s, &start);
if (s[start] == '+') {
start++;
skipws(s, &start);
int end = numend(s, start);
result += atoi(s.substr(start, end-start).c_str());
start = end;
} else if (s[start] == '-') {
start++;
skipws(s, &start, true);
if (s[start] == '(') {
start++;
int end = parenthesisend(s, start);
result -= calculate(s.substr(start, end-start));
start = end+1;
}
else {
int end = numend(s, start);
result -= atoi(s.substr(start, end-start).c_str());
start = end;
}
} else {
int end = numend(s, start);
result = atoi(s.substr(start, end-start).c_str());
start = end;
}
skipws(s, &start);
}
return result;
}
LeetCode224——Basic Calculator的更多相关文章
- LeetCode224. Basic Calculator (用栈计算表达式)
解题思路 用两个栈分别存字符和数字. 顺序读入字符,处理方式分为字符和数字两种. 处理字符分为')'和非')'两种. 处理数字需要读取字符栈栈顶,分为'+'.'-'和非'+'.'-'. 代码 clas ...
- [Swift]LeetCode224. 基本计算器 | Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- [LeetCode] Basic Calculator II 基本计算器之二
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- [LeetCode] Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- 数据结构与算法(1)支线任务2——Basic Calculator
题目:https://leetcode.com/problems/basic-calculator/ Implement a basic calculator to evaluate a simple ...
- Basic Calculator
本博客介绍leetcode上的一道不难,但是比较经典的算法题. 题目如下: Implement a basic calculator to evaluate a simple expression s ...
- LeetCode#227.Basic Calculator II
题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...
- Java for LeetCode 227 Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
随机推荐
- python(38):sys.argv,sys.argv.pop(),获取用户的外部输入,非指定
见下面的例子(一): # /usr/bin/env python # coding=utf8 import os import requests import sys if __name__ == & ...
- (转)Maven学习-处理资源文件
转自:http://www.cnblogs.com/now-fighting/p/4888343.html 在前面两篇文章中,我们学习了Maven的基本使用方式和Maven项目的标准目录结构.接下来, ...
- android alipay
"java.security.spec.InvalidKeySpecException" KeyFactory keyFactory =KeyFactory.getInstance ...
- 【DIOCP3-说明书】DIOCP3的输出日志
DIOCP3除了有详细的监控面板之外,还有详细的输出日志,当然需要打开日志编译开关! 在工程选项加入DEBUG编译指令,这样在运行中就可以看到DIOCP3的运行详细日志 日志输出在EXE相同目录的LO ...
- html5的拖拽dragAPI(如果看了API不懂,看看那三个案例就会恍然大悟)
1.拖拽和释放定义: 拖拽:Drag; 释放:Drop; 2.源对象和目标对象: 3.相关API: ondragstart:源对象开始被拖动 ondrag:源对象被拖动的过程中 ondragend:源 ...
- plsql连接远程oracle和like无法查询中文问题
https://blog.csdn.net/yangguangzhidi/article/details/53301979 ************************************** ...
- django signal
@receiver(post_save, sender=User) def create_account(sender, instance=None, **kwargs): if instance i ...
- jquery复选框 选中事件 及其判断是否被选中_常用笔记
checkbox的change事件可监听是否选中状态,也可添加onclick事件. var dom=$('.checkbox'); 1. 判断checkbox是否被选中 var dom=$('.che ...
- [RTC]系统时间NTP和RTC同步,Debian的时区配置
转自:http://www.cnblogs.com/jiu0821/p/5999566.html Debian的时区配置 一. 修改时区 1. 查看当前时区 命令 : "date -R&qu ...
- JBoss Wildfly (1) —— 7.2.0.Final编译
JBoss Wildfly (1) -- 7.2.0.Final编译 wildfly版本: 7.2.0.Final-testsuite-fix jdk版本: jdk1.7.0_79 maven版本: ...