博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
227. Basic Calculator II
阅读量:7256 次
发布时间:2019-06-29

本文共 2613 字,大约阅读时间需要 8 分钟。

题目:

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.

链接: 

题解:

比较简练的方法就是把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

转载地址:http://gjkdm.baihongyu.com/

你可能感兴趣的文章
Android能够获取到唯一的设备ID吗?
查看>>
高性能 Windows Socket 组件 HP-Socket v3.0.1 正式发布
查看>>
控件篇:CheckedListBox的全选与反选
查看>>
Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现
查看>>
Lind.DDD.Domain.ISortBehavor~上移与下移
查看>>
MVVM架构~knockoutjs实现简单的购物车
查看>>
asp.net生成静态页
查看>>
分享一下cookies操作(增、删、改、查)小经验
查看>>
默认初始化&拷贝初始化&直接初始化&值初始化&列表初始化
查看>>
gulp使用方法总结
查看>>
1119 Pre- and Post-order Traversals
查看>>
OpenGL——gl10方法解析
查看>>
JAVA利用第三方平台发送短信验证码。
查看>>
每日踩坑 2019-04-08 VS2015未能找到路径“…\bin\roslyn\csc.exe”的解决方案
查看>>
如何编写 Nagios 插件 (http://zener.blog.51cto.com/937811/727685)
查看>>
C++扬帆远航——11(斐波那契数列)
查看>>
第二章
查看>>
CSS3 pointer-events介绍 | CSS | 前端观察
查看>>
图论 List
查看>>
图的邻接表、拓扑排序、无权最短路径和加权最短路径
查看>>