美文网首页
227. 基本计算器 II

227. 基本计算器 II

作者: 放下梧菲 | 来源:发表于2020-05-09 11:14 被阅读0次

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

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

示例 1:

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

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

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

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

本题和https://www.jianshu.com/p/3975859c1539
是很像的,区别就在于一个是有括号一个是没括号,一个是有乘除法一个是没乘除法。那我们就要抓住两道题的类似的地方来寻求一个通解。
有括号那就要先做括号的,那有乘除的,由于只有加减乘除没有括号,因此一旦出现乘除就一定要把值给算出来,而如果是加减法的话,由于不确定之后是否有乘除法,那只能先将值给存储起来,而通过之前的例子https://www.jianshu.com/p/3975859c1539
我们已经知道了如何把加减法化为全加法,那只要遇见加减法就将数值存入栈中,当出现乘除法时,取出栈中的值和当前的数值进行乘除法即可,本题的小技巧就是将乘除法与数字关联起来,加减法化为全化为加法。
代码如下:

class Solution {
    public int calculate(String s) {
    
        Stack <Integer> val = new Stack<>();
        int v = 0;
        char flag = '+';
        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            if(Character.isDigit(ch)){
                v = v * 10 + (ch - '0');
            }
            if( (!Character.isDigit(ch) && ch != ' ') || i == s.length()-1){
                int pre;
                switch (flag){
                    case '+': val.push(v); break;
                    case '-': val.push(-v);break;
                    case '*': pre = val.pop();val.push(pre*v);break;
                    case '/': pre = val.pop();val.push(pre/v);break;
                }
                v = 0;
                flag = ch;
            }    
        }
        int result = 0;
        while( !val.isEmpty() ){
            int v1 = val.pop();
            result += v1;
        }
        return result;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

相关文章

  • 2021.3.11每日一题

    227. 基本计算器 II[https://leetcode-cn.com/problems/basic-calc...

  • Leetcode【227、468、848、1081】

    问题描述:【Stack】227. Basic Calculator II 解题思路: 这道题是实现一个基本计算器,...

  • 227. 基本计算器 II

    实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符...

  • 227. 基本计算器 II

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。输入:s = "3+...

  • 227. Basic Calculator II

    227. Basic Calculator II

  • 227. Basic Calculator II 基本计算器 |

    题目链接tag: Medium; question:  Implement a basic calculator ...

  • Leetcode 基本计算器 II

    题目描述 leecode第227题:基本计算器 II[https://leetcode-cn.com/proble...

  • LeetCode 基本计算器 II

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 示例...

  • 36 - Hard - 基本计算器 II

    实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符...

  • 2【中等】基本计算器 II

    【题目】给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。【示例】输入...

网友评论

      本文标题:227. 基本计算器 II

      本文链接:https://www.haomeiwen.com/subject/mwghnhtx.html