8. String to Integer (atoi)

8. String to Integer (atoi)

题目

将字符串转换为整数。

1.首先将遇到的空格舍弃,直到遇到首个非空字符。
2.然后,选择正负号,将字符串翻译成数值。
字符串可以包含构成整数的字符之后的其他字符,这些字符被忽略,对函数没有影响。
Input: “4193 with words”
Output: 4193

3.如果str中的非空字符的第一个序列不是一个有效的整数,或者如果没有这样的序列存在,当str是空的,或者它只包含空白字符,那么就不会执行转换。

如果没有有效的转换,就返回零。
Input: “words and 987”
Output: 0
4.如果越界,返回边界值(2147483647或-2147483648)
int是32bit,范围 [−231, 231− 1]
INT_MAX (231− 1) or INT_MIN (−231) is returned.

Input: “-91283472332”
Output: -2147483648

代码块

class Solution {
    public int myAtoi(String str) {
        if(str.length() == 0|| str == null)
            return 0;

        int sign = 1;
        int index = 0;
        long result = 0;

        while(index < str.length() && str.charAt(index) == ' '){//当全为空的时候,index=str.length(),下面的if和for就都不会执行了.
                index ++;
        }
        if(index < str.length()){//加一个大条件
                if(str.charAt(index) == '-'){
                    sign = -1;
                    index ++;
            }else if(str.charAt(index) == '+'){
                index ++;
            }
        }

        for(int j = index; j < str.length(); j++){
            if(str.charAt(j) >= '0' && str.charAt(j) <= '9'){
                result = result *10 + str.charAt(j) - '0';
                 if(result > java.lang.Integer.MAX_VALUE){
                    return  sign <0 ?(java.lang.Integer.MIN_VALUE):(java.lang.Integer.MAX_VALUE);
                // if(result > java.lang.Long.MAX_VALUE){
                //     return (int)( ***sign<'0'***?(java.lang.Long.MIN_VALUE):(java.lang.Long.MAX_VALUE));    sign是int型,不加引号。
                }
            }else{
                break;
            }
        }
        result *= sign;
        return (int)result;
    }

public static void main(String[] args) {
        //String str =  "2147483648";
        String str =  " 1";
        System.out.println(myAtoi(str));
    }
}

代码分析

本题需要考虑几种情况:
1. 如果为空或者长度为零时,返回0;
str=null 说明str没有指向任何对象 ;而str长度为零时str肯定不为null的,此时str指向一个长度为零的字符串。
2. 如果遇到空格就将索引往后移;(while)
3. 判断符号;(是正是负)
4. 判断数字是否在0-9;再判断数值是否越界
5. 将数值乘字符表示出来。

本题的条件二(while)控制了str全为空的情况,当全为空的时候,index=str.length(),下面的if和for就都不会执行了。
java.lang.Integer.MAX_VALUE 表示Java中int型最大值。

空格的ASCII为32;’0’的ASCII码为48。



Figure 1. ASCII

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值