[leetcode]String to Integer (atoi)

String to Integer (atoi)

题意:把字符串转化为int。

           题意说得极不清楚,”        +0000003246awg2457  ”,类似这样的输入样例,竟然是合理的,应该返回3246,首先要把前面的空格都去掉,正负号去掉,把其他的非数字截掉,然后去掉多余的开头的0,判断长度是否超过10,如果长度为10,判断是否正数大于2^31-1,负数小于2^32,接下来才能正常转化。每读一个数字,将原来的数字*10再加上新数。

public class Solution144 {

   public int atoi(String str) {

             if (str.length()==0){

                       return 0;

             }

             boolean label=false;

             while(str.length()>1&&str.charAt(0)==''){

                       str=str.substring(1);

             }

       if (str.charAt(0)=='-'){

                label=true;

                str=str.substring(1);

       }      

       if (str.charAt(0)=='+'){

                str=str.substring(1);

       }

       while(str.length()>1&&(str.charAt(0)=='0')){

                str=str.substring(1);

       }

       for (int i=0;i<str.length();i++){

                if(!(str.charAt(i)>='0'&&str.charAt(i)<='9')){

                          str=str.substring(0,i);

                          break;

                }

       }       

       if (str.length()>10){

                if (!label){

                          returnInteger.MAX_VALUE;

                }else{

                           returnInteger.MIN_VALUE;

                }

       }

       if (str.length()==10){

                if (!label){

                          if(myCompare(str,"2147483647")){

                                   returnInteger.MAX_VALUE;

                          }

                }else{

                          if(myCompare(str,"2147483648")){

                                   returnInteger.MIN_VALUE;

                          }

                }               

       }

       int ans=0;

       for (int i=0;i<str.length();i++){

                ans=ans*10+(str.charAt(i)-'0');

       }

       if (label){

                ans=-ans;

       }

       return ans;

    }

 

         privateboolean myCompare(String str, String number) {

                   for(int i=0;i<10;i++){

                            if(str.charAt(i)>number.charAt(i)){

                                     returntrue;

                            }

                            if(str.charAt(i)<number.charAt(i)){

                                     returnfalse;

                            }

                   }

                   returnfalse;

         }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值