剑指Offer第四十九题:把字符串转换成整数

把字符串转换成整数

https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tqId=11202&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:

输入一个字符串,包括数字字母符号,可以为空

输出描述:

如果是合法的数值表达则返回该数字,否则返回0
示例1

输入

+2147483647
    1a33

输出

2147483647
    0 

解答:
public class Q_49 {
    public int StrToInt(String str) {
        char[] strchar = str.toCharArray();
        if (str.length() == 0) return 0;
        long sum = 0;//用long是防止溢出
        int s = 1;
        if (strchar[0] == '-') s = -1;
        for (int i = (strchar[0] == '-' || strchar[0] == '+') ? 1 : 0; i < str.length(); i++) {
            if (!('0' <= strchar[i] && strchar[i] <= '9')) return 0;
            sum = (sum << 1) + (sum << 3) + (strchar[i] & 0xf);//sum<<1+sum<<3=sum*2+sum*8    strchar[i]&0xf:相当于取二进制后四位
        }
        if (sum * s <= Integer.MAX_VALUE && sum * s >= Integer.MIN_VALUE)//溢出就返回0;
            return (int) (sum * s);
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(new Q_49().StrToInt("2147483647"));
    }
}


全部评论

相关推荐

05-24 14:12
门头沟学院 Java
点赞 评论 收藏
分享
现在才开始投还有可能吗😭😭😭
牛客621925249号:开秋招了已经
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务