算法记录
LeetCode 题目:
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
说明
一、题目
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
二、分析
- 就是一道针对字符串转整型数字的问题,不存在什么算法的难点,只要把边界条件写清楚就可以了。
- 特别是针对越界判断那里。
class Solution {
public int strToInt(String str) {
if(str == null || "".equals(str.trim())) return 0;
int max_num = Integer.MAX_VALUE / 10, max_ind = Integer.MAX_VALUE % 10, index = 0;
int flag = 1, num = 0;
char[] chars = str.toCharArray();
while(chars[index] == ' ') index++;
if(chars[index] == '-') {
flag = -1;
index++;
}
else if(chars[index] == '+') index++;
while(index < str.length()) {
if(chars[index] < '0' || chars[index] > '9') break;
if(num > max_num || (num == max_num && (chars[index] - '0' > max_ind))) {
if(flag == 1) return Integer.MAX_VALUE;
else return Integer.MIN_VALUE;
}
num = num * 10 + chars[index] - '0';
index++;
}
return num * flag;
}
}
总结
熟悉字符串的操作。