题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路
逐位转换,注意边界值。
时间复杂度O(m),空间复杂度O(1)。
代码
public class Solution {
public int StrToInt(String str) {
if(str == null || str.equals("")) return 0;
char[] cs = str.toCharArray();
int ans = 0;
int flag = cs[0] == '-' ? -1 : 1;
for(int i=(cs[0]=='+' || cs[0]=='-')?1:0; i < cs.length; i++){
if(cs[i] < '0' || cs[i] > '9') return 0;
ans = (ans<<3) + (ans<<1) + (cs[i]&0xf);
}
ans *= flag;
if(((ans>>31)&1) == 0 && flag == -1) return 0;
if(((ans>>31)&1) == 1 && flag == 1) return 0;
return ans;
}
}
笔记
检查是否溢出,可以比较原数字与转换后数字的补码符号位。