Middle-题目99:227. Basic Calculator II

原创 2016年05月31日 19:52:33

题目原文:
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
题目大意:
计算一个表达式字符串的值,其中含有+,-,*,/,空格和数字
题目分析:
既然用JavaScript的eval水过去会错,那就认真算一下。
首先没有括号,不用考虑括号的问题。那么从左到右先乘除后加减即可。遍历字符串两遍。
源码:(language:java)

public class Solution {
    public int calculate(String s) {
        s=s.replace(" ","");
        String[] nums = s.split("[\\+\\-\\*\\/]");
        List<Integer> numberList = new ArrayList<>();
        for(String num : nums)
            numberList.add(Integer.parseInt(num));
        int index = 0;
        for (int i = 0; i<s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '+' || ch == '-') 
                index++;
            else if (ch == '*' || ch == '/') {
                int op1 = numberList.get(index);
                int op2 = numberList.get(index+1);
                numberList.remove(index);
                numberList.remove(index);
                numberList.add(index, operate(op1,ch,op2));
            }
        }

        int result = numberList.get(0); index = 1;
        for(int i = 0;i<s.length();i++) {
            char ch = s.charAt(i);
            if(ch == '+' || ch == '-') 
                result = operate(result, ch, numberList.get(index++));
        }
        return result;

    }
    private Integer operate(int a, char op, int b) {
        if(op=='+')
            return a+b;
        else if(op=='-')
            return a-b;
        else if(op=='*')
            return a*b;
        else 
            return a/b;
    }
}

成绩:
90ms,beats 13.83%,众数26ms,3.63%
Cmershen的碎碎念:
主要浪费时间还是在split上。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode[227] Basic Calculator II

实现一个基本的计算器 https://leetcode.com/problems/basic-calculator-ii/支持简单的’+’,’-‘,’*’,’/’功能。之前在学数据结构的Stack时有...
  • hust_dxxxd
  • hust_dxxxd
  • 2016年05月04日 11:29
  • 377

leetcode 227: Basic Calculator II

leetcode 227: Basic Calculator II PYTHON JAVA C++
  • xudli
  • xudli
  • 2015年06月26日 03:18
  • 6898

LeetCode 227. Basic Calculator II 解题报告【python】

思路分析 该题是一个简单的表达式求值问题,我们可以采用“算符优先法”来解决该问题。该算法在严蔚敏的《数据结构C语言版》第三章有详细描述。 该题中的每一个表达式都是由操作数和操作符组成,根据四则运算法则...
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2016年01月30日 14:11
  • 609

【LeetCode】Basic Calculator && Basic Calculator II

1、Basic Calculator  Total Accepted: 3726 Total Submissions: 24053 My Submissions Question Solution  ...
  • u013027996
  • u013027996
  • 2015年06月24日 11:01
  • 3518

LeetCode-227. Basic Calculator II (JAVA)实现计算器 II

LeetCode-227. Basic Calculator II (JAVA)实现计算器 II
  • mine_song
  • mine_song
  • 2017年04月30日 09:54
  • 447

227. Basic Calculator II

常用方法为两个栈,数值栈与操作符栈,每次操作符入栈前比较优先级,小的推迟运算。以下是不用栈的方法, class Solution { public: int calculate(strin...
  • zhanghuanzj
  • zhanghuanzj
  • 2016年03月15日 13:05
  • 155

227. Basic Calculator II**

Implement a basic calculator to evaluate a simple expression string. The expression string contai...
  • alwaystry
  • alwaystry
  • 2017年01月02日 00:31
  • 64

227. Basic Calculator II

227. Basic Calculator II 题目描述:Implement a basic calculator to evaluate a simple expression string.T...
  • mupengfei6688
  • mupengfei6688
  • 2017年12月10日 17:58
  • 32

224. Basic Calculator 227. Basic Calculator II

Implement a basic calculator to evaluate a simple expression string. The expression string may cont...
  • zjucor
  • zjucor
  • 2016年12月31日 17:12
  • 169

leetcode:227. Basic Calculator II

Implement a basic calculator to evaluate a simple expression string.The expression string contains o...
  • u011514185
  • u011514185
  • 2017年04月09日 18:32
  • 82
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目99:227. Basic Calculator II
举报原因:
原因补充:

(最多只允许输入30个字)