JZ67 把字符串转换成整数
Posted 张同学吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZ67 把字符串转换成整数相关的知识,希望对你有一定的参考价值。
题目
描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1 输入:"+2147483647"
返回值:2147483647
示例2 输入:“1a33”
返回值:0
解题思路
看到这道题首先我们应该想到要判断边界问题,也就是你的下标不可以超出str.length();其次:
第一、如果是一个空字符或者字符串长度为零,返回0。
第二、如果输出的整形越过了Int的边界,那么返回Int的边界值。
第三、如果是一个无效的字符串,比如数字中夹杂着字母,返回0
第四、如果字符串符号为空,默认为正数。
所以第一步检测空字符,很简单,
if(str == null || str.length()==0)return 0;
第二步,检查正负号,字符串第一位如果为‘+’,那么标识符设为1,如果字符串第一位为‘-’,标识符设置成‘-1’.同时i置到下一位。
int flag = 0;
if (str.charAt(i) == '+') {
i++;
} else if (str.charAt(i) == '-') {
flag = -1;
i++;
}else{
flag = 1;
i++;
}
第三步,对剩余的字符串转化成整数,并且比较结果与Int类型的边界值
运行代码
public class Solution{
public int StrToInt(String str) {
int i = 0;
int length = str.length();
if (length == 0) return 0;
int flag = 0;
if (str.charAt(i) == '+') {
i++;
} else if (str.charAt(i) == '-') {
flag = -1;
i++;
}else{
flag = 1;
i++;
}
int num = 0;
while (i < str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
int index = str.charAt(i);
if (num > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
} else if (num < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
if (index >= '0' && index <= '9') {
num = num * 10 + str.charAt(i) - '0';
} else {
return 0;
}
i++;
}
return (flag * num);
}
}
有可以改进的地方欢迎各位大佬指点
以上是关于JZ67 把字符串转换成整数的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 67. 把字符串转换成整数