• 227 Basic Calculator II 基本计算器II


    实现一个基本的计算器来计算一个简单的字符串表达式。

    字符串表达式仅包含非负整数,+, - ,*,/四种运算符和空格 。 整数除法仅保留整数部分。

    你可以假定所给定的表达式总是有效的。

    一些例子:

    "3+2*2" = 7
    " 3/2 " = 1
    " 3+5 / 2 " = 5
    注意: 不要使用eval 内置的函数库。

    详见:https://leetcode.com/problems/basic-calculator-ii/description/

    Java实现:

    class Solution {
        public int calculate(String s) {
            if(s == null || s.length() == 0){
                return -1;
            }
            
            char sign = '+';
            int cur = 0;
            Stack<Integer> stk = new Stack<Integer>();
            for(int i = 0; i<s.length(); i++){
                char c=s.charAt(i);
                if(Character.isDigit(c)){
                    cur = cur*10 + c-'0';
                }
                
                if((!Character.isDigit(c) && c!=' ') || i==s.length()-1){
                    if(sign == '-'){
                        stk.push(-cur);
                    }else if(sign == '+'){
                        stk.push(cur);
                    }else if(sign == '*'){
                        stk.push(stk.pop()*cur);
                    }else if(sign == '/'){
                        stk.push(stk.pop()/cur);
                    }
                    sign = c;
                    cur = 0;
                }
            }
            
            int res = 0;
            for(int num : stk){
                res += num; 
            }
            return res;
        }
    }

    C++实现:

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

    参考:https://www.cnblogs.com/grandyang/p/4601208.html

  • 相关阅读:
    leetcode之Unique Binary Search Trees
    c++ 非常量引用产生临时对象
    redis的启动脚本
    leetcode 之 Insertion Sort List
    leetcode 之 Product of Array Except Self
    一致性hash的由来和原理
    我的vim 配置
    【原创】html页面清除浮动的几种方法
    实现本页面跳转的几种方式
    php输出语句用法总结
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8758475.html
Copyright © 2020-2023  润新知