leetcode #8 atoi

写了好久才发现思路错了,不应该用字符串处理的。
一下代码没有通过测试,一会儿再修改,先去上课。

public class Solution {
    public int myAtoi(String str) {
        int outPut=0,i=0;
        if(str==null||str.length()==0)return 0;
      str=str.trim();   
      StringBuffer s = new StringBuffer(str);
      s=s.insert(s.length(),"*");   //an end sign

      while((s.charAt(i)>='0'&&s.charAt(i)<='9')||s.charAt(i)=='-'||s.charAt(i)=='+'){
        i++;    
        }
        if(i>1&&(s.charAt(i-1)=='-'||s.charAt(i-1)=='+'))i--;
        try{
            outPut=Integer.parseInt(s.substring(0,i).trim());
        }catch(NumberFormatException exception){
            System.out.println("please enter number."); 
        }
        return outPut;
    }
}

整个算法都用字符串处理的话算法就太傻了,我早该意识到问题,写了快3小时。。。

Update:
换了个思路,一会儿就撸出了新的算法,如下:

public class Solution {
    public int myAtoi(String str) {
        int outPut=0,i=0;
        double bigNum=0.0;
        boolean negative=false;
        if(str==null||str.length()==0)return 0;
      str=str.trim();
      if(str.charAt(0)=='-'){
        negative=true;
        i++;
      }
      if(str.charAt(0)=='+')i++;

      while(str.charAt(i)>='0'&&str.charAt(i)<='9'){
        int n = Character.getNumericValue(str.charAt(i));
        bigNum=10*bigNum+n;
        i++;
        if(i>str.length()-1)break;
        }
      if(negative)bigNum=0-bigNum;
        if(bigNum>Integer.MAX_VALUE)return Integer.MAX_VALUE;
        if(bigNum<Integer.MIN_VALUE)return Integer.MIN_VALUE;
        return (int)bigNum;
    }
}

代码速度还是比较慢,没办法,用了double型计算。
看了别人的代码,确实我的还有待完善,下次再更新。
Fight On!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值