一:题目描述:
1.

2.测试样例:

二:具体分析:
1.
这道题的题目还是比较容易读懂的,但是,如果你亲自尝试,提交就会发生许多问题,下面来简单分析,1.给定的是一个字符串,要求返回一个int类型的整数 。2.给定的字符串中包含若干个空格,这些空格可能在字符串头部,尾部,中间 任意位置出现,题目要求要去除头部空格。3.给定的字符串带有符号:+或-,如果没有,默认为加号。4.读入每一个字符,遇到非数字之外的任意字符,则截断字符串,如果直接就是非数字(除符号位以外)直接返回0:例如:(1).+-12--->0 (2).ssss 202002 --->0 (3)3.1415926--->3。5. 防止越界问题,因为返回的是int类型,如果超过int的最大值,直接截断,返回最大值,最小值同理。
2.代码实现
package Exercise;
public class E81502 {
public static void main(String[] args) {
int i = myAtoi(" 22000000000000000004193 with words");
System.out.println(i);
}
public static int myAtoi(String s) {
// 使用long类型
//如果为空,直接返回0
if (s.length() == 0) {
return 0;
}
int index = 0;//遍历字符串中字符的位置
long res = 0;//最终结果
int sign = 1;//符号,1是正数,-1是负数,默认为正数
int length = s.length();
// 过滤掉字符串前面的空格
while (index < length && s.charAt(index) == ' ') {
index++;
}
if (index == length) {
return 0;
}
//判断符号
if (s.charAt(index) == '-' || s.charAt(index) == '+') {
sign = s.charAt(index++) == '+' ? 1 : -1;
}
for (; index < length; index++) {
//取出字符串中字符,然后转化为数字
int digit = s.charAt(index) - '0';
//按照题中的要求,读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。
//字符串的其余部分将被忽略。如果读取了非数字,后面的都要忽略
if (digit < 0 || digit > 9)
break;
res = res * 10 + digit;
//越界处理
if (res * sign > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
if (res * sign < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
}
return (int) (sign * res);
}
}

版权声明:本文为m0_58354370原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。