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

Note: Do not use the eval built-in library function.

链接: http://leetcode.com/problems/basic-calculator-ii/

题解:

比较简练的方法就是把String根据运算符先split一下,之后再计算各部分,另外也可以用Token来做。自己做的方法比较繁琐,就是从头到尾遍历String,然后根据运算符的不同做一些特殊的处理。这里几个小地方,比如一开始 s += ‘+‘来处理最后的元素,保存之前的运算符,之前运算的结果等等。二刷的时候一定要好好优化。

Time Complexity - O(n), Space Complexity - O(1)

public class Solution {
    public int calculate(String s) {
        if(s == null || s.length() == 0)
            return 0;
        s += ‘+‘;
        char prevOperator = ‘+‘;
        int res = 0, prevNum = 0, curNum = 0;

        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c == ‘ ‘)
                continue;
            else if (Character.isDigit(c))
                curNum = curNum * 10 + (int)(c - ‘0‘);
            else if (c == ‘+‘ || c == ‘-‘) {
                if(prevOperator == ‘+‘ || prevOperator == ‘-‘) {
                    if(prevOperator == ‘+‘) {
                        res += prevNum + curNum;
                    } else {
                        res += prevNum - curNum;
                    }
                } else {
                    if(prevOperator == ‘*‘)
                        res += prevNum * curNum;
                    else
                        res += prevNum / curNum;
                }
                curNum = 0;
                prevNum = 0;
                prevOperator = c;
            } else if (c == ‘*‘ || c == ‘/‘) {
                if(prevOperator == ‘+‘)
                    prevNum = curNum;
                else if(prevOperator == ‘-‘)
                    prevNum = -curNum;
                else if(prevOperator == ‘*‘)
                    prevNum *= curNum;
                else if(prevOperator == ‘/‘)
                    prevNum /= curNum;

                curNum = 0;
                prevOperator = c;
            }
        }

        return res;
    }
}

Reference:

https://leetcode.com/discuss/41790/10-16-lines-java-easy

https://leetcode.com/discuss/41558/20ms-o-n-time-o-1-space-one-scan-c-solution

https://leetcode.com/discuss/41641/17-lines-c-easy-20-ms

https://leetcode.com/discuss/41902/share-my-java-solution

https://leetcode.com/discuss/42903/java-straight-forward-iteration-solution-with-comments-stack

https://leetcode.com/discuss/42423/28ms-code-with-stacks-for-oprand-extension-cover-also-given

时间: 2024-12-22 02:56:09

227. Basic Calculator II的相关文章

【LeetCode】227. Basic Calculator II

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 assu

Leetcode 227. Basic Calculator II JAVA语言

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 ex

[LeetCode#227] Basic Calculator II

Problem: 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

Java for 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 ex

leetcode 227. Basic Calculator II ---------- java

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 ex

[leedcode 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 ex

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. Example 1: Input: "3+2*2&q

LeetCode 227. 基本计算器 II(Basic Calculator II)

227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和空格.整数除法仅保留整数部分. LeetCode227. Basic Calculator II中等 示例?1: 输入: "3+2*2" 输出: 7 示例 2: 输入: " 3/2 " 输出: 1 示例 3: 输入: " 3+5 / 2 " 输出:

LeetCode OJ Basic Calculator II

Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: string trans_to_postfix_expression_to_s(string); // 将得到的表达式转化为后缀表达式 long long int calculate_from_postfix_expression(); // 根据后缀表达式计算值 private: vector<string