第49题——把字符串转换成整数

162 阅读1分钟

题目:

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

思路:

  • 1.字符串为空
  • 2.只有一个正或负号
  • 3.整数上下溢出 Integer.MAX_VALUE (2^31-1) Integer.MIN_VALUE(-2^31)

Java

package nowcoder;

public class S49_StrToInt {
    public int strToInt(String str){
        if(str == null ||str.length()==0 || str.trim().equals(""))
            return 0;
        char[] chars = str.trim().toCharArray();
        int res=0,flag=1,start=0,tmp=0;
        if(chars[0] == '-') {
            flag = -1;
            start = 1;
        }
        if(chars[0] == '+')
            start = 1;
        for(int i =start;i < chars.length;i++){
            if(chars[i] > '9' || chars[i] < '0')
                return 0;
            //当前个位数字
            int dight = (int)(chars[i] - '0');
            tmp = res * 10 + dight;
            //判断正数溢出
            if(flag == 1 && res*10>Integer.MAX_VALUE - dight)
                return 0;
            //判断负数溢出
            if(flag == -1 && res*10*flag < Integer.MIN_VALUE + dight)
                return 0;
            res = tmp;
        }
        return flag* res;
    }
    public static void main(String[] args){
        S49_StrToInt s49 = new S49_StrToInt();
        System.out.println(s49.strToInt("-2147483649"));
    }
}

Python

class StrToInt:
    def strToInt(self,str):
        if len(str) == 0 or not str:
            return 0
        start = 0
        symbol = 1
        res = 0
        if str[0] == '+':
            start = 1
        elif str[0] == '-':
            start = 1
            symbol = -1
        for i in range(start, len(str)):
            if str[i] >= '0' and str[i] <= '9':
                res = res * 10 + ((ord(str[i]) - ord('0')))
            else:
                return 0
        if res > 2147483647:
            return 0
        return symbol * res
if __name__ == '__main__':
    test = StrToInt()
    print(test.strToInt("-2147483649"))