LeetCode65——Valid Number
这个题目给定的拿督评分是Hard,做了之后发现,它真正Hard的地方不在于这个题目有多难想,而是由多恶心
判断字符串是否是数字,由于题目的示例没有给太多的Sample input,所以很多情况你并不知道是不是数字,这就会影响你的判断,
另外,比如前后导的空格,冗余的加减符号,这些没有给明确说明,很多都是在提交的时候,它告诉你wrong answer你才恍然大悟。
好了,说说这个题目我的思路,无非就是记录几个特殊字符的索引和个数,根据这些来判断。
可能比较繁冗,期待更简单的办法。
代码:
class Solution {
public:
bool isNumber(string s) {
int count = 0;
int indexDot = -1;
int dotCount = 0;
int indexE = -1;
int eCount = 0;
int signCount = 0;
int plusCount=0;
int plusIndex=-1;
int minCount=0;
int minIndex=-1;
auto it = s.begin();
while (*it == ' ')
{
s.erase(it);
//it++;
}
while (*it == '-' || *it == '+')
{
if (*it == '-' || *it == '+')
signCount++;
s.erase(it);
//it++;
}
if (signCount > 1)
return false;
//删除后置空格
it = s.end() - 1;
while (*it == ' ')
{
s.erase(it);
it--;
}
int len = s.size();
if (len == 0)
return false;
for (int i = 0; i < len; i++)
{
if ((isalpha(s[i]) && s[i] != 'e') || s[i] == ' ')
return false;
else if (s[i] <= '9'&&s[i] >= '0')
{
count++;
}
else if (s[i] == 'e')
{
eCount++;
indexE = i;
}
else if (s[i] == '.')
{
dotCount++;
indexDot = i;
}
else if (s[i] == '+')
{
plusCount++;
plusIndex=i;
}
else if(s[i]=='-')
{
minCount++;
minIndex=i;
}
else
{
return false;
}
}
if (dotCount>1 || eCount > 1)
return false;
if (indexE == len - 1)
return false;
if (indexE>-1 && indexE < indexDot)
return false;
if (indexE == 0)
return false;
if (count == 0)
return false;
if (indexDot == 0 && (indexE == len - 1 || indexE == 1))
return false;
if(plusIndex>-1&&(plusIndex==len-1||plusCount>1||plusIndex!=indexE+1))
return false;
if(minIndex>-1&&(minIndex==len-1||minCount>1||minIndex!=indexE+1))
return false;
return true;
}
};
本文深入解析了LeetCode上的65号题目“有效数字”的实现细节及难点,介绍了如何通过记录特殊字符索引和数量来判断字符串是否符合有效数字的标准。
2599

被折叠的 条评论
为什么被折叠?



