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;  
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【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
  • 3519

HTTP basic Authorization

来源:http://blog.csdn.net/libaineu2004/article/details/38384487 POST /goform/ser2netconfigAT ...
  • u011430225
  • u011430225
  • 2016年07月08日 13:05
  • 1475

自己动手写basic解释器(一)

自己动手写basic解释器刺猬@http://blog.csdn.net/littlehedgehog注: 文章basic解释源码摘自梁肇新先生的《编程高手箴言》(据他所说这个代码也是网上摘录的),源...
  • littlehedgehog
  • littlehedgehog
  • 2008年09月14日 16:14
  • 9258

Basic表示一个简单的属性

5、@Basic(fetch=FetchType,optional=true)   可选   @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 ...
  • u014131893
  • u014131893
  • 2014年03月25日 23:19
  • 2083

JPA的Basic注解

在默认的情况下,Entity中的属性加载方式都是即时加载(EAGER)的,当Entity对象实例化时,就加载了实体中相应的属性值。但对于一些特殊的属性,比如长文本型text、字节流型blob型的数据,...
  • crazy_pan
  • crazy_pan
  • 2010年10月21日 23:15
  • 9661

HTTP Basic Authentication认证

在你访问一个需要HTTP Basic Authentication的URL的时候,如果你没有提供用户名和密码,服务器就会返回401,如果你直接在浏览器中打开,浏览器会提示你输入用户名和密码。 要在发...
  • youzhouliu
  • youzhouliu
  • 2016年07月27日 19:05
  • 3024

http 基础认证(Basic Authentication)

还是几个月前的老东西。  计算机网络作业需要一个http基础认证的网站来学习http协议本身以及它的安全性。实在找不到这种网站,应该是过时了的技术吧。由于认证过程仅仅是Base64加密(其实这个不算加...
  • u014006264
  • u014006264
  • 2015年07月09日 10:53
  • 3353

Basic脚本解释器移植到STM32

上次讲了LUA移植到STM32,这次讲讲Basic脚本解释器移植到STM32。在STM32上跑Basic脚本,同样可以跟穿戴设备结合,也可以作为初学者学习MCU的入门工具,当然前提是有人做好Basic...
  • hellogv
  • hellogv
  • 2014年05月23日 18:33
  • 9351

Visual Basic for Applications 学习笔记(一)

一 创建新工作簿 如果要用 Visual Basic 创建新的工作簿,应使用 Add 方法。下述过程创建了新工作簿。Microsoft Excel 自动将该工作簿命名为“BookN”,其中 N 是下一...
  • DeRoshia
  • DeRoshia
  • 2007年01月19日 14:16
  • 820

python Basic Authentication

有时候我们需要python解析一些页面,实现自动化监控的功能。而这些页面一般需要用户输入username,password进行基本的验证,这时就需要我们使用python基本的认证功能。现已python...
  • heymysweetheart
  • heymysweetheart
  • 2016年01月03日 12:25
  • 1343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Basic CalculatorII
举报原因:
原因补充:

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