Basic CalculatorII

原创 2015年11月20日 21:27:53

题目描述

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

题目解答

解题思路

如表达式:1+2-3*4/2+1。对于加减运算,与Basic Calculator类似,
可以直接将每个加减运算符前面的数字加入最终的结果中,
而对于乘除,需要先计算出乘法或者除法子表达式的值。—乘除直接计算
我们设置一个变量op表示当前的操作符,其中:

0:’+’或’-’
1:’*’
2:’/’
使用变量lastNum表示当前操作符前面的数字。

如果op = 1,那么计算就对运算符’*’前后两个数进行相乘,所得结果仍然保存在lastNum中。
如果op = 2,那么计算就对运算符’/’前后两个数进行相除,所得结果仍然保存在lastNum中。
如果op = 0,为加减运算。

没有括号操作变得简单

代码实现

public class Solution {
    public int calculate(String s) {
       if(s == null || s.length() == 0)
            return -1;

        int len = s.length();
        int result = 0;
        int num = 0;
        int lastNum = 0;
        int sign = 1;
        int op = 0;


        for(int i = 0; i < len; i++){
            char c = s.charAt(i);
            if(c >= '0' && c <= '9'){
                num = 0;
               //判断正数位数 递增 注意 s[i] not c
                while(i < len && s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                    num = num*10 +(s.charAt(i) - '0');
                    i++;
                }
                i--;
                switch(op){
                    case 0:
                        lastNum = num;
                        break;
                    case 1:
                        lastNum *= num;
                        break;
                    case 2:
                        lastNum /= num;
                        break;
                }
            }else if(c == '+'){
                //之前的符号
                result += (sign*lastNum);
                op = 0;
                sign = 1;
            }else if(c == '-'){
                result += (sign*lastNum);
                op = 0;
                sign = -1;
            }else if(c == '*'){
                op = 1;
            }else if(c == '/'){
                op = 2;
            }
        }

        result += (lastNum*sign);

        return result;  
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【Basic Code】一道“单例”的笔试题

题目:设计一个类,只能生成该类的一个实例。         面试过程中,对于“设计模式”这块,由于“单例”非常具有代表性,同时代码量不大,实现起来比较简单,经常会被放到笔试部分让应聘者手写,   ...

Basic表示一个简单的属性

5、@Basic(fetch=FetchType,optional=true)   可选   @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 ...

第十一天(HTML5BASIC)

WEB组成1、WEB设计 – jpg,psd2、WEB前端实现 – 网页(html) 1、HTML – 网页实现 2、CSS – 修饰和美化网页 3、JS – Javascrip...
  • water_v
  • water_v
  • 2017年10月30日 21:06
  • 140

【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器

vb6是一个典型的拖控件加代码的编程代表,因此也一直被认为难登大雅之堂,但是,在vb6中可以完全纯粹地使用代码控制这个窗体与窗体的控件。这样生成出来的控件位置摆放精确无比,无须拖好控件之后,再利用工具...

[译]OpenCV的基础光学字符识别(Basic OCR in OpenCV)

Github源码 From:http://blog.damiles.com/2008/11/basic-ocr-in-opencv/ 在这个教程当中我们将完成一个基础的数字光学字符识别。这包括...

Basic Paxos介绍与论述

Basic Paxos 在一个靠Messages passing作为节点通信方式的分布式系统中,多个参与者需要就某一个变量var的值v达成一致。多个参与者A、B、C,可能对于v的值,A想设成value...

[译]OpenCV的基础光学字符识别(Basic OCR in OpenCV)

Github源码 From:http://blog.damiles.com/2008/11/basic-ocr-in-opencv/ 在这个教程当中我们将完成一个基础的数字光学字符识别。这包括把一个...

Spring Boot实战之Filter实现简单的Http Basic认证

Spring Boot实战之Filter 本文在上一篇文章http://blog.csdn.net/sun_t89/article/details/51912905 的基础上,给每个rest...
  • sun_t89
  • sun_t89
  • 2016年07月15日 13:12
  • 24901

蓝桥杯BASIC_27(2n皇后问题)

问题描述   给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列...

Basic脚本解释器移植到STM32

上次讲了LUA移植到STM32,这次讲讲Basic脚本解释器移植到STM32。在STM32上跑Basic脚本,同样可以跟穿戴设备结合,也可以作为初学者学习MCU的入门工具,当然前提是有人做好Basic...
  • hellogv
  • hellogv
  • 2014年05月23日 18:33
  • 8634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Basic CalculatorII
举报原因:
原因补充:

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