本文共 1548 字,大约阅读时间需要 5 分钟。
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
分析
该题最重要的就是各种边界条件的判定,保持代码的健壮性。需要考虑的条件包括:
此处只要参考了JDK源码中的部分,Integer.parstInt(String str)
函数,关于该函数源码的具体大数溢出问题的说明,可以参见文章中“大数溢出问题”的部分。
牛客AC:
public class Solution { public int StrToInt(String str) { if (str == null || str.length() <= 0) return 0; int result = 0; int limit = -Integer.MAX_VALUE; // 对上限取反不会发生溢出 boolean isNegetive = false; int length = str.length(); int index = 0; char firstChar = str.charAt(0); if (firstChar < '0') { if (firstChar == '-') { isNegetive = true; limit = Integer.MIN_VALUE; } else if (firstChar != '+') return 0; if (length == 1) return 0; index++; } while (index < length) { char c = str.charAt(index); int digit = c - '0'; if (digit < 0 || digit > 9) return 0; // 除以10必须放在不等式右侧防止左侧溢出 // 如果满足条件,说明 result*10不会发生溢出 if (result < limit / 10) return 0; result *= 10; // digit必须放在不等式右侧防止左侧溢出,判断防止最终溢出 // 如果满足条件说明 result-digit不会发生溢出 if (result < limit + digit) return 0; // 当成负数累减 result -= digit; index++; } return isNegetive ? result : -result; }}
转载地址:http://ykxgi.baihongyu.com/