ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode 224. 基本计算器

2021-03-10 10:35:26  阅读:154  来源: 互联网

标签:index ++ sign 括号 else 计算器 224 sg LeetCode


计算器得简单题,本来想用后缀+栈来解决,但是没想到只涉及加减和括号可以直接用括号展开得思想进行解决;

 

主要方法是使用栈来记录当前整个括号内的值;

 

对字符串内的符号进行记录,为括号展开作准备;

例如:-(2+1)

记录负号之后,遇到左括号直接压栈,此时取栈顶符号进行+,-号判断时,可以达到相反的判断逻辑,遇到右括号直接弹栈,避免对括号外围得影响;

算是括号展开的一种取巧得方式;

 

class Solution {
public:
    int calculate(string s) {
        int index = 0;
        int ret = 0;
        stack<bool>sign;
        sign.push(true);
        bool sg = true;
        while (index < s.size()) {
            if (s[index] == '+') {
                sg = sign.top();
                index++;
            }
            else if (s[index] == '-') {
                sg = !sign.top();
                index++;
            }
            else if (s[index] == '(') {
                sign.push(sg);
                index++;
            }
            else if (s[index] == ')') {
                sign.pop();
                index++;
            }
            else if (s[index] >= '0' && s[index] <= '9') {
                int cnt = 0;
                while (s[index] >= '0' && s[index] <= '9') {
                    cnt = cnt * 10 + (s[index++] - '0');
                }
                if (sg) {
                    ret += cnt;
                }
                else {
                    ret -= cnt;
                }
            }
            else
                index++;
        }
        return ret;
    }
};

  

标签:index,++,sign,括号,else,计算器,224,sg,LeetCode
来源: https://www.cnblogs.com/songlinxuan/p/14510012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有