实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式可以包含左括号 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/basic-calculator 类似题目:LeetCode 227. 基本计算器 II(栈) 12 ms 8.2 MB 92 ms 13.6 MB
1. 题目
(
,右括号 )
,加号 +
,减号 -
,非负整数和空格
。示例 1: 输入: "1 + 1" 输出: 2 示例 2: 输入: " 2-1 + 2 " 输出: 3 示例 3: 输入: "(1+(4+5+2)-3)+(6+8)" 输出: 23 说明: 你可以假设所给定的表达式都是有效的。 请不要使用内置的库函数 eval。
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
class Solution { //C++ public: int calculate(string s) { stack<int> stk; int sign = 1; long num = 0, sum = 0; for(int i = 0; i < s.size(); ++i) { if(s[i] =='(') { //遇见左括号,把括号外面的结果入栈,外面的符号入栈 stk.push(sum); stk.push(sign); sign = 1;//下次的符号初始值 sum = 0; num = 0; } else if(s[i] =='+') { sum += sign*num;//和 sign = 1;//当前符号 num = 0; } else if(s[i] =='-') { sum += sign*num; sign = -1; num = 0; } else if(s[i] ==')') { //遇到右括号 sum += sign*num;//括号内的和加起来 sign = stk.top();//括号外的符号 stk.pop();//符号出栈 sum = sign*sum + stk.top();//和*符号+外面的和 stk.pop();//外面的和出栈 num = 0; } else if(isdigit(s[i])) num = num*10+s[i]-'0'; } return sum+sign*num; } };
class Solution:# py3 def calculate(self, s: str) -> int: sum, sign, num = 0, 1, 0 stk = [] for c in s: if c ==' ': continue if c =='+': sum += sign*num sign = 1 num = 0 elif c =='-': sum += sign*num sign = -1 num = 0 elif c =='(': stk.append(sum) stk.append(sign) sum, num = 0, 0 sign = 1 elif c ==')': sum += sign*num sum = sum*stk.pop()+stk.pop() num = 0 else: num = num*10+int(c) return sum+sign*num
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算