LeetCode 8. String to Integer (atoi)

public class Solution {
    public int myAtoi(String s) {
       char str[]= s.toCharArray();
        int i=0,j=s.length()-1; //i一直指向当前操作下标,j指向最后一个非空下标
       if(s.length()==0)
       {
           return 0;
       }
       boolean signal=false; //负数
       int sum=0;
       int a=0; //用于记录第一个非数字字符到最后一个字符的位置
           while(str[i]==' ')  //去掉字符串开始的空格
                {
                    i++;
                }
                while(str[j]==' ')  //去掉字符串末尾的空格
                {
                    j--;
                }
           if(str[i]=='+'){  //是否是正数
                    i++;
                }else if(str[i]=='-') {  //是否是负数
                signal =true;
                i++;
                }
                /*
                    if(i<=j && str[i]=='0' && str[i+1]=='x')   //判断是否是十六进制数值
                    {
                        i=i+2;
                        for(;i!=j;i++){
                           int item=0;
                           switch(str[i])
                           {
                           case '0':item=0;break;
                           case '1':item=1;break;
                           case '2':item=2;break;
                           case '3':item=3;break;
                           case '4':item=4;break;
                           case '5':item=5;break;
                           case '6':item=6;break;
                           case '7':item=7;break;
                           case '8':item=8;break;
                           case '9':item=9;break;
                
                           case 'a':
                           case 'A':item=10; break;
                           case 'b':
                           case 'B':item=11;break;
                           case 'c':
                           case 'C':item=12;break;
                           case 'd':
                           case 'D':item=13;break;
                           case 'e':
                           case 'E':item=14;break;
                           case 'f':
                           case 'F':item=15;break;
                           default:{item=0;a=j-i;i=i+1;break;}
                           }
                           sum=sum+item*pow(16,j-i);
                        }
                    }
                    
                    if(str[i]=='0' && str[i+1]!=0) //判断是否是八进制数值
                    {
                        i=i+2;
                        for(;i!=j;i++){
                            int item;
                            switch(str[i])
                           {
                           case '0':item=0;break;
                           case '1':item=1;break;
                           case '2':item=2;break;
                           case '3':item=3;break;
                           case '4':item=4;break;
                           case '5':item=5;break;
                           case '6':item=6;break;
                           case '7':item=7;break;
                           default :return 0;
                           }
                        sum=sum+item*pow(8,j-i); 
                       }
                    }
                    */
                        if(i<=j){// && (str[i]>='0' && str[j]<='9')){  //判断是否是十进制数值
                      int item=0;
                         for(;i<=j;i++){
                            switch(str[i])
                           {
                           case '0':item=0;break;
                           case '1':item=1;break;
                           case '2':item=2;break;
                           case '3':item=3;break;
                           case '4':item=4;break;
                           case '5':item=5;break;
                           case '6':item=6;break;
                           case '7':item=7;break;
                           case '8':item=8;break;
                           case '9':item=9;break;
                           default: {item=0;a=j-i+1;i=j+1;break;}  //最先出现非数字的下标到最后非空字符下标差为a,并i=i+1,结束循环
                           }
                          /*if(signal)
                            {
                            	sum=(int) (sum-item*Math.pow(10.0,j-i)); 
                            }
                            else*/
                             sum=(int) (sum+item*Math.pow(10.0,j-i)); 
                        }
                    }else{       //第一个非双引号或符号的字符不是数字,直接返回0;
                        return 0;
                    }
    
        if(signal){
         return  sum=(int) (-sum/Math.pow(10, a));
        }
        return (int )((int)sum/Math.pow(10.0,a));
        
    }
 

    
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值