• leetcode 224


    简介

    简易计算器
    一时半会儿没写出来,看了官方题解.
    感觉思路是遇到 ( 前一个操作符号,入栈,遇到 ) 栈中弹出操作符号
    遇到 + 符号为栈顶符号 遇到 - 符号为 栈顶符号的反符号
    官方使用栈来保存操作默认初始的操作为 + ,ops为1, sign为1
    对 3+2-(4-5) 进行思路遍历
    如果遇到 3 进入

    else {
                    long num = 0;
                    while(i < s.size() && (s[i] >= '0' && s[i] <= '9')) {
                        num = num * 10 + s[i] - '0';
                        i++;
                    }
                    rlt += num * sign;
                }
    

    得到 rlt = 3
    遇到 '+'

    else if(s[i] == '+') {
        sign = ops.top();
        i++;
    

    sign = 1
    遇到 2
    rlt = 5
    遇到 '-'

    else if(s[i] == '-') {
                    sign = -ops.top();
                    i++;
    

    sign = -1;
    遇到 (

    ops.push(sign);
                    i++;
    

    ops top = -1;
    遇到 4
    rlt = 5 - 4 = 1;
    遇到 -
    sign = 1
    遇到5
    rlt + 5 = 6
    遇到 )
    直接弹出符号

    code

    class Solution {
    public:
        int calculate(string s) {
            stack<int> 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;
        }
    };
    
    作者:LeetCode-Solution
    链接:https://leetcode-cn.com/problems/basic-calculator/solution/ji-ben-ji-suan-qi-by-leetcode-solution-jvir/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    解决ios下的微信页面背景音乐无法自动播放问题
    vue Vue-cli 笔记
    document.documentElement和document.body区别介绍
    GD库使用小结---2
    GD库使用小结---1
    踩到两只“bug”
    CI加载流程小结
    文件加载---理解一个project的第一步
    缓存的使用
    小小的分页
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14512198.html
Copyright © 2020-2023  润新知