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】String——Basic Calculator II (227)

题目: Implement a basic calculator to evaluate a simple expression string. The expression string...

LeetCode 227. Basic Calculator II

LeetCode 227. Basic Calculator II 时间复杂度O(n),空间复杂度O(1)c++

Leetcode 227. Basic Calculator II

题目链接:https://leetcode.com/problems/basic-calculator-ii/#/description 题目描述: mplement a basic ca...

227-m-Basic Calculator II

四则运算。真的只是四则而已,没有要求括号只有加减乘除,因此还算是简单的,难点可能就在对乘除的处理上。最开始写的是将操作数和操作符全部分别提取到2个数组中,再一个个出栈运算,发现不好写,因为数组是静态栈...

Basic Calculator II - LeetCode 227

题目描述: Implement a basic calculator to evaluate a simple expression string. The expression string c...
  • bu_min
  • bu_min
  • 2015年06月27日 11:24
  • 307

leetcode:227. Basic Calculator II

Implement a basic calculator to evaluate a simple expression string.The expression string contains o...

LeetCode No.227 Basic Calculator II

LeetCode No.227 Basic Calculator II

Leetcode 227 Basic Calculator II

简单计算器

LeetCode[227] Basic Calculator II

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

LeetCode227. Basic Calculator II

题目链接: https://leetcode.com/problems/basic-calculator-ii/ 题目描述:计算字符串表达式的值。可能会有多余空格。题目分析:这道题对于我来说坑略多...
  • codeTZ
  • codeTZ
  • 2016年01月22日 17:50
  • 218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目99:227. Basic Calculator II
举报原因:
原因补充:

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