加载中...
面试题 16.26-计算器(Calculator LCCI)
发表于:2021-12-03 | 分类: 中等
字数统计: 561 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/calculator-lcci

英文原文

Given an arithmetic equation consisting of positive integers, +, -, * and / (no paren­theses), compute the result.

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"
Output: 7

Example 2:

Input: " 3/2 "
Output: 1

Example 3:

Input: " 3+5 / 2 "
Output: 5

Note:

  • You may assume that the given expression is always valid.
  • Do not use the eval built-in library function.

中文题目

给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

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

示例 1:

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

示例 2:

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

示例 3:

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

说明:

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

通过代码

高赞题解

思路:
1. 如果碰到数字, 则把数字入栈
2. 如果碰到空格, 则继续下一步
3. 如果碰到 ‘+’ ‘-‘ ‘*’ ‘/‘, 则查找下一个数字num
    A.如果是’+’, 下一个数字num直接入栈
    B.如果是’-‘,-num入栈
    C.如果是’*‘, num = stack.pop() * num, 入栈
    D.如果是’/‘, num = stack.pop() / num, 入栈
4. 最后,把栈里的数相加就是结果

class Solution {
    public int calculate(String s) {
        char[] cs = s.trim().toCharArray();
        Stack<Integer> st = new Stack();
        int ans = 0, i = 0;
        while(i < cs.length){
            if(cs[i] == ' ') {i++;continue;}
            char tmp = cs[i];
            if(tmp == '*' || tmp == '/' || tmp == '+' || tmp == '-'){
                i++;
                while(i < cs.length && cs[i] == ' ') i++;
            }
            int num = 0;
            while(i < cs.length && Character.isDigit(cs[i])){
                num = num * 10 + cs[i] - '0';
                i++;
            }
            switch(tmp){
                case '-':
                    num = -num;
                    break;
                case '*':
                    num = st.pop() * num;
                    break;
                case '/':
                    num = st.pop() / num;
                    break;
                default:
                    break;
            }
            st.push(num);
        }
        while(!st.isEmpty()) ans += st.pop();
        return ans;
    }

    
}

统计信息

通过次数 提交次数 AC比率
15385 39514 38.9%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
面试题 16.25-LRU 缓存(LRU Cache LCCI)
下一篇:
面试题 17.20-连续中值(Continuous Median LCCI)
本文目录
本文目录