LeetCode 227. Basic Calculator II(基本计算器)

题目:
在这里插入图片描述
解析:
这题的解决思路是模拟运算过程,从左到右,读取数字和字符,做到累加,关键是如何解决遇到的乘号或者除号的问题,因为在遇到他们之前那个数字已经被累加或者减去了,此时需要减掉多加的部分(这个数可能是正值也可能是负值)。需要保存的值有:最后一次读到的符号、最后一个读到的符号的左右两个数、累计总和。最后还需要考虑末尾数字的累加问题。
过程分析:
刚开始默认sign为“+”,读到数字就把之前的结果乘10累加,读到符号就判断上一个符号是什么,如果是加号就让总和加上累计的cur值,如果是减号就减去cur值,并把cur变为pre;如果是乘号,需要减去之前错误累加的部分,再加上乘积,除号的处理也类似。读到i值超过下标后,结算最后的数据。
代码实现:

class Solution {
    public int calculate(String s) {
         int pre=0;
         int cur=0;
         int sum=0;
         char sign='+';
         char[] array=s.trim().toCharArray();
         for(int i=0;i<=array.length;i++){
        	 if(i!=array.length&&Character.isDigit(array[i])){
        		 cur=cur*10+array[i]-'0';       		 
        	 }else{
        		 if(i!=array.length&&array[i]==' '){
        			 continue;
        		 }else if(sign=='+'){
        			 sum+=cur;
        			 pre=cur;
        		 }else if(sign=='-'){
        			 sum-=cur;
        			 pre=-cur;
        		 }else if(sign=='*'){
        			 sum=sum-pre+pre*cur;
        			 pre=pre*cur;
        		 }else if(sign=='/'){
        			 sum=sum-pre+pre/cur;
        			 pre=pre/cur;
        		 }
        		 cur=0;
        		 if(i!=array.length)
        		 sign=array[i];
        	 }        	 
         }
         return sum;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值