zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 16.26. 计算器

    题目:

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

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    说明:

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

    分析:

    先遍历一遍字符串,将需要做加法的数字存进栈中,同时将乘除先计算出结果。减法转换为加法。然后再将栈中的数字遍历加和。

    程序:

    class Solution {
        public int calculate(String s) {
            char[] arr = s.replaceAll(" ", "").toCharArray();
            Stack<Integer> stack = new Stack<>();
            int res = 0;
            char prev = ' ';
            for(int i = 0; i < arr.length; ++i){
                StringBuilder str = new StringBuilder();
                while(i < arr.length && arr[i] >= '0' && arr[i] <= '9'){
                    str.append(arr[i]);
                    i++;
                }
                int num = Integer.parseInt(str.toString());
                if(prev == '+'){
                    stack.push(num);
                }else if(prev == '-'){
                    stack.push(-num);
                }else if(prev == '*'){
                    stack.push(stack.pop() * num);
                }else if(prev == '/'){
                    stack.push(stack.pop() / num);
                }else{
                    stack.push(num);
                }
                if(i < arr.length)
                    prev = arr[i];
            }
            while (!stack.isEmpty()) {
                res += stack.pop();
            }
            return res;
        }
    }
  • 相关阅读:
    codeforces 645C. Enduring Exodus
    test markdown
    codeforces 817C Really Big Numbers
    797C C. Minimal string
    ubuntu配置安卓开发环境记录
    常用网址
    Mysql/Oracle/达梦中数据字典表
    Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题
    凝思磐石4.2系统字符编码的修改
    hadoop学习(三)HDFS常用命令以及java操作HDFS
  • 原文地址:https://www.cnblogs.com/silentteller/p/12531924.html
Copyright © 2011-2022 走看看