LeetCode 8. String to Integer (atoi)

来源:互联网 发布:梦里花落知多少的含义 编辑:程序博客网 时间:2024/06/05 21:07
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));            }     }


                                             
0 0