zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    samba中的pdbedit用法
    服务器批量管理工具【转载】
    Linux网卡bounding详解
    Windows下为MySQL做定时备份
    对于新安装的MySQL如何提升MySQL的安全级别
    为Apache动态增加模块
    DSO动态加载PHP模块到Apache服务器
    系统网页打不开,排查故障步骤
    Low overhead memory space management
    pip 升级 Appium-Python-Client
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14512198.html
Copyright © 2011-2022 走看看