题目
题号:49
题目名:把字符串转换成整数
编程语言
Java
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
初次思路
想要str是可以被转换的字符串,首字符可以是"+","-"或者是数字字符
判断是+或者-,cal来记录
然后直接用while遍历,将每个位数进行相加
这里要注意,越界的数也不算正常的数,int范围是[-2147483647,2147483647]
解题代码
public class Solution {
public int StrToInt(String str) {
if(str== null || str.length() ==0) return 0;
char[] chars = str.toCharArray();
if(!(chars[0]=='+'||chars[0]=='-'||(chars[0]>='0'&&chars[0]<='9'))) return 0;
int cal =chars[0]=='-'?-1: 1;//如果是+或者数,那就做1乘,否则就是-1乘
long sum =0;
int curr = (chars[0]=='+'||chars[0]=='-')?1:0;//定义遍历起点,如果第一位是+或者-,就移动到第二位
if(curr>=chars.length||chars[curr]=='0') return 0;//第一位越界或者是0,直接返回错误
while(curr<chars.length) {
if(!(chars[curr]>='0'&&chars[curr]<='9')) return 0;
long i = chars[curr]-'0';
sum=i+(sum*10);
if(sum>2147483647) return 0;//如果超出int返回,返回错误
curr++;
}
return (int)sum*cal;
}
}
算法练习代码我都开源在码云上,有需要的朋友可以看看