t**r 发帖数: 3428 | 1 valid number这道题看到有人用有限状态机做 太牛不敢看 |
r****7 发帖数: 2282 | 2 我觉得状态机是最简单的方法。。。
那么多corner case,写code写死了
【在 t**r 的大作中提到】 : valid number这道题看到有人用有限状态机做 太牛不敢看
|
t*****a 发帖数: 106 | 3 有限状态机不是早被批的体无完肤了吗...早没人用了。 贴个code,按别人的
思想写的
class Solution {
public:
int skipwhitespace(const char *p)
{
int i=0;
while(*(p+i)==' ') i++;
return i;
}
int skipsign(const char *p)
{
if(*p=='+'||*p=='-') return 1;
return 0;
}
int skipdigit(const char *p)
{
int i=0;
while(isdigit(*(p+i))) i++;
return i;
}
bool isNumber(const char *s) {
char *p=const_cast(s);
if(p==NULL) return false;
p+=skipwhitespace(p);
p+=skipsign(p);
int n1=skipdigit(p);
p+=n1;
if(*p=='.') p++;
int n2=skipdigit(p);
if(n1==0&&n2==0) return false;
p+=n2;
if(*p=='e'||*p=='E')
{
p++;
p+=skipsign(p);
int n3=skipdigit(p);
if(n3==0) return false;
p+=n3;
}
p+=skipwhitespace(p);
return *p=='\0';
}
}; |
I*******g 发帖数: 7600 | 4 很简单的,
我以前在工作中实现过
比这还复杂
有10 个 states
e.g -0.4E-8.86
or (2/3)e(1-1/8)
【在 t**r 的大作中提到】 : valid number这道题看到有人用有限状态机做 太牛不敢看
|
m*****k 发帖数: 731 | 5 求代码。
【在 I*******g 的大作中提到】 : 很简单的, : 我以前在工作中实现过 : 比这还复杂 : 有10 个 states : e.g -0.4E-8.86 : or (2/3)e(1-1/8)
|