<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">果然是恶心人的题目。错了10次才AC。</span>
大概看看代码就知道了:
class Solution {
public:
bool isNumber(const char *s) {
//valid chars: numbers, one dot not at either side, one 'e' not at either side, '-' at begin or before e
//is these valid?: " 0 . 1 e 1 0 ", " - 0 e - 0"
int i = 0, n = strlen(s), start = 0;
int ie = -1, id = -1, ineg = -1, inege = -1, ipose = -1;
char c = s[i];
while (c == ' ')
{
c = s[++i];
}
if (c == '-' || c == '+')
{
ineg = i;
c = s[++i];
}
start = i;
n--;
while (n >= 0)
{
if (s[n] == ' ')
{
n--;
}
else
{
break;
}
}
if (start == n && !isdigit(c) )
{
return false;
}
while (i <= n)
{
if (isdigit(c))
{
c = s[++i];
continue;
}
if (c == '.')
{
if (id >= 0)
{
return false;
}
id = i;
c = s[++i];
}
else if (c == 'e')
{
if (ie >= 0)
{
return false;
}
ie = i;
c = s[++i];
}
else if (c == '-')
{
if (inege >= 0)
{
return false;
}
inege = i;
c = s[++i];
}
else if (c == '+')
{
if (ipose >= 0)
{
return false;
}
ipose = i;
c = s[++i];
}
else
{
return false;
}
}
while (s[i])
{
if (s[i] != '\0' && s[i] != ' ')
{
return false;
}
i++;
}
if ((inege >= start) && (inege == n || inege == start || inege - ie != 1))
{
return false;
}
if ((ipose >= start) && (ipose == n || ipose == start || ipose - ie != 1))
{
return false;
}
if (ie == start || ie == n )
{
return false;
}
if (ie >start && id >= start)
{
if (ie - id < 0 || (id == start && ie == id + 1))
{
return false;
}
}
return true;
}
};
有人说用Python的偷法是:
def isNumber(self, s):
try:
float(s)
return True
except:
return False
还有人说这是oj上最烂的题目,好多人顶。