JZ49 把字符串转换成整数
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例:
示例1
输入:
"+2147483647"
返回值:
2147483647
示例2
输入:
"1a33"
返回值:
0
题解:
方法:
1.思路:
其实这道题就是考的关于边界点的处理
int 最大值:2147483647 最小值:-2147483648
2.复杂度:
空间复杂度:O(1)
时间复杂度:O(n)
3.代码:
public class Solution {
public int StrToInt(String str) {
//方法
// return Integer.MIN_VALUE; int 最大值:2147483647 最小值:-2147483648
if(str.length()<1)
return 0;
int i=0;
int flag = 1;//记录正负,默认为正
long ans=0;
if(str.charAt(0) == '-')
flag = -1;
if(str.charAt(i) == '+' || str.charAt(i) == '-')
i++;
while(i<str.length()){
if(str.charAt(i)<='0' || str.charAt(i)>='9')//不是数字
return 0;
if(ans>Integer.MAX_VALUE/10)//超过最大值
return 0;
int temp = str.charAt(i) - '0';
ans = ans*10 + temp;
i++;
if(flag*ans>Integer.MAX_VALUE || flag*ans<Integer.MIN_VALUE)//排除最后一次乘完结果是超出范围如 2147483648
return 0;
}
return (int)ans*flag;
}
}
方法:捕捉异常
1.思路:
可以用库函数解决,不过需要异常处理
2.复杂度:
空间复杂度:O(1)
时间复杂度:O(1)
3.代码:
public class Solution {
public int StrToInt(String str) {
// 方法:捕捉异常
Integer res=0;
try{
res = new Integer(str);
}catch (NumberFormatException e) {
} finally{
return res;
}
}
}