Leetcode:227. 基本计算器 II

Leetcode 227. 基本计算器 II

题目描述

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

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

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

思路

思路1:栈

使用一个栈存储数字,然后使用一个符号记录延后记录运算符,初始为+,最后出栈相加即可得到最后的结果

代码

代码1

class Solution {
    public int calculate(String s) {
        if (s == null || s.length() == 0){
            return 0;
        }
        
        int result = 0;
        int tempNum = 0;
        char tempOp = '+';
        int getNum = 0;
        Stack stack = new Stack<>();
        
        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            if (ch >= '0' && ch <= '9'){

                tempNum = tempNum * 10 + ch - '0';
            } 
            if ((ch != ' ' && (ch < '0' || ch  > '9')) || i == s.length() - 1){
                switch(tempOp){
                    case '+':
                        stack.push(tempNum);
                        break;
                    case '-':
                        stack.push(-tempNum);
                        break;
                    case '*':
                        getNum = stack.peek() * tempNum;
                        stack.pop();
                        stack.push(getNum);
                        break;
                    case '/':
                        getNum = stack.peek() / tempNum;
                        stack.pop();
                        stack.push(getNum);
                        break;
                }
                tempNum = 0;
                tempOp = ch;
            }
        }
        while(!stack.isEmpty()){
            result += stack.pop();
        }
        return result;
    }
}

复杂度分析

时间复杂度

$O(n)$

空间复杂度

$O(n)$


文章作者: 小风雷
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小风雷 !
评论
 上一篇
Leetcode:341. 扁平化嵌套列表迭代器 Leetcode:341. 扁平化嵌套列表迭代器
Leetcode:341. 扁平化嵌套列表迭代器题目描述给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。 列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。 示例
2020-04-05
下一篇 
Leetcode:239. 滑动窗口最大值 Leetcode:239. 滑动窗口最大值
Leetcode: 239. 滑动窗口最大值题目描述给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。  
2020-04-03
  目录