【发布时间】:2021-09-27 10:59:19
【问题描述】:
问题链接:https://leetcode.com/problems/string-to-integer-atoi/ 我已经实现了我的解决方案,但是对于像“-+42”这样的测试用例它失败了,因为字符串中出现了 2 个连续的符号。我需要在我的代码中做哪些更改,我哪里错了?帮助将不胜感激
我的代码:
class Solution {
public int myAtoi(String s) {
s=s.trim();
char sign='+';
if (s.length()==0) return 0;
String digit="";
for(int i=0;i<s.length();i++)
{
//checking for sign
if(s.charAt(i)=='-'||s.charAt(i)=='+')
sign=s.charAt(i);
//checking for all non digit characters
else if((s.charAt(i)>='a'&& s.charAt(i)<='z')||(s.charAt(i)>='A' && s.charAt(i)<='Z')||(s.charAt(i)==' ')||(s.charAt(i)=='.')||(s.charAt(i)=='-')||(s.charAt(i)=='+'))
break;
else{
digit=digit+s.charAt(i);
}
}
if(digit=="") return 0;
//System.out.print(sign);
try{
int n=(Integer.parseInt(digit));
//int a=Integer.parseInt(digit);
System.out.print(sign);
if(sign=='-')
return (-n);
return n;
}
//check for out of range for integer
catch(NumberFormatException e)
{
if(sign=='-')
{
//
int n=Integer.MIN_VALUE;
return n;}
else
{
int n=Integer.MAX_VALUE;
return n;
}
}
}
}
【问题讨论】:
-
了解它抛出了什么错误以及发生在哪一行会很有帮助。
-
也许你应该在循环外检查
-和+,而不是在循环内。 -
您可以从实际按照挑战中给出的说明开始,例如仅跳过前导空格(
trim()不仅删除空格),仅查找和处理单个前导符号字符(不要在循环中重复执行),并且仅收集数字(例如代码也收集$字符) .