zoukankan      html  css  js  c++  java
  • LeetCode#227.Basic Calculator II

    题目

    Implement a basic calculator to evaluate a simple expression string.

    The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.

    You may assume that the given expression is always valid.

    Some examples:

    "3+2*2" = 7
    " 3/2 " = 1
    " 3+5 / 2 " = 5

    大意:一个不包含括号,包含空格的计算器

    思路

    采用堆栈实现。从头到尾扫描字符串:

    1. 如果是数字,作为当前的各位,之前的数左移一位作为高位。
    2. 如果是符号,若是加减法,将数字乘以符号压入堆栈。
    3. 如果是乘除法,从堆栈弹出一个数,与当前数相乘除压回堆栈。

    注意,使用后缀表达式,先读出两个数在读出符号,顺序应为:

    1. 前一个符号的初始值为+(因为读出第一个符号时,对第一个数字的操作一定是压入堆栈,同+的情况)
    2. 读出一个数字,压入堆栈
    3. 读出一个符号
    4. 在读出一个数字
    5. 根据前一个符号决定当前操作
    6. 操作完成后将刚读出的符号记为前一个符号。

    这样就相当于完成了普通表达式到后缀表达式的转换。

    代码

    class Solution {
    public:
        int calculate(string s) {
            stack<int> myStack;
            char sign = '+';
            int num = 0,res=0;
            for (int i = 0; i < s.size(); i++){
                if (isdigit(s[i]))
                    num = num * 10 + s[i] - '0';
                if (((!isdigit(s[i])) && (!isspace(s[i])))||(i==s.size()-1)){
                    if (sign == '+')
                        myStack.push(num);
                    if (sign == '-')
                        myStack.push(num*-1);
                    if (sign == '*'){
                        num = myStack.top()*num;
                        myStack.pop();
                        myStack.push(num);
                    }
                    if (sign == '/'){
                        num = myStack.top() / num;
                        myStack.pop();
                        myStack.push(num);
                    }
                    sign = s[i];
                    num = 0;
                }
            }
            while (!myStack.empty()){
                res += myStack.top();
                myStack.pop();
            }
            return res;
        }
    };

    其他

    关于”ctype.h”

    image

    图片来自维基百科<https://zh.wikipedia.org/wiki/Ctype.h>

  • 相关阅读:
    如何用js解网页中间内容的高度自适应
    常见Js获取高宽度的方法
    CSS3 转换 transform
    CSS3 过渡 transition
    CSS3 动画 animation
    当页面内容不够的时候,如何让footer一直固定底部显示
    如何用js判断是否为手机访问
    用css解决table文字溢出控制td显示字数
    jquery实现全选和反选功能
    JS中filter的用法
  • 原文地址:https://www.cnblogs.com/yatesxu/p/5471225.html
Copyright © 2011-2022 走看看