企业网站空间多大,php网站开发工程师任职要求,哈尔滨网络公司资讯,seo搜索如何优化【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主#xff0c;题解使用C语言。#xff08;若有使用其他语言的同学也可了解题解思路#xff0c;本质上语法内容一致题解使用C语言。若有使用其他语言的同学也可了解题解思路本质上语法内容一致 【题目描述】
给你一个字符串表达式 s 请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数比如 eval() 。
【示例一】
输入s 1 1
输出2
【示例二】
输入s 2-1 2
输出3
【示例三】
输入s (1(452)-3)(68)
输出23
【提示及数据范围】
1 s.length 3 * 10的5次方s 由数字、、-、(、)、和 组成s 表示一个有效的表达式 不能用作一元运算(例如 1 和 (2 3) 无效)- 可以用作一元运算(即 -1 和 -(2 3) 是有效的)输入中不存在两个连续的操作符每个数字和运行的计算将适合于一个有符号的 32位 整数
【代码】
// 括号展开 栈class Solution {
public:int calculate(string s) {stackint ops;ops.push(1);int sign 1;int ret 0;int n s.length();int i 0;while (i n) {if (s[i] ) {i;} else if (s[i] ) {sign ops.top();i;} else if (s[i] -) {sign -ops.top();i;} else if (s[i] () {ops.push(sign);i;} else if (s[i] )) {ops.pop();i;} else {long num 0;while (i n s[i] 0 s[i] 9) {num num * 10 s[i] - 0;i;}ret sign * num;}}return ret;}
};