1.题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1:
输入
+2147483647
1a33输出
2147483647
0
2.解题思路
(1) 首先判断第一个字符是符号‘ + ‘ 或者 ’ - ‘ 还是数字
(2) 首字母为 ’ + ‘,则设flag 为 1,计算[1,len)的数值
(3) 首字母为 ’ - ‘,则设flag为-1,计算[1,len)的数值
(4) 首字母为数字,则计算[0,len)的数值
计算时有个是否溢出的判断。
3.代码
public class Solution {
public int StrToInt(String str) {
if(str.trim().equals("")){
return 0;
}
int sum = 0;
int flag = 1;
if(str.charAt(0) =='+'||str.charAt(0)=='-'){
if(str.charAt(0)=='-') {
flag = -1;
}
sum = cal(str,1,str.length(),flag);
}else{
sum = cal(str,0,str.length(),flag);
}
return sum*flag;
}
//计算结果
private int cal(String str, int start, int end,int flag) {
int sum = 0;
for(int i = start;i<end;i++){
if(str.charAt(i)>='0' &&str.charAt(i)<='9'){
if(flag == 1 && sum>Integer.MAX_VALUE)
throw new RuntimeException("上溢出");
if(flag == -1 && sum<Integer.MIN_VALUE)
throw new RuntimeException("下溢出");
sum = sum*10+str.charAt(i)-'0';
}else{
return 0;
}
}
return sum;
}
}