【LintCode 题解】微软面试算法题:转换字符串到整数

题目描述

实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。

样例1

输入: "10"
输出: 10

样例2

输入: "1"
输出: 1

样例3

输入: "123123123123123"
输出: 2147483647
说明: 因为 123123123123123 > INT_MAX, 所以我们返回INT_MAX

样例4

输入: "1.0"
输出: 1
说明: 我们只需要转换第一个有效数字

 

题解

比起自己刷题,有大神带着刷肯定更好,专业的算法课程(点击免费试听)可以随问随答,在最短时间内提高算法水平,应对大厂面试。

public class Solution {
   public int atoi(String str) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if(str == null) {
            return 0;
        }
        str = str.trim();
        if (str.length() == 0) {
            return 0;
        }
            
        int sign = 1;
        int index = 0;
    
        if (str.charAt(index) == '+') {
            index++;
        } else if (str.charAt(index) == '-') {
            sign = -1;
            index++;
        }
        long num = 0;
        for (; index < str.length(); index++) {
            if (str.charAt(index) < '0' || str.charAt(index) > '9')
                break;
            num = num * 10 + (str.charAt(index) - '0');
            if (num > Integer.MAX_VALUE ) {
                break;
            }
        }   
        if (num * sign >= Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        }
        if (num * sign <= Integer.MIN_VALUE) {
            return Integer.MIN_VALUE;
        }
        return (int)num * sign;
    }
}

 

你可能感兴趣的:(九章算法面试题)