CodingInterview-表示数值的字符串

这道题可以使用.或者e/E将数字分为两段,每一段数字都有不同的特征,可以使用函数的参数来控制这些特征以判断是否为数字。这种方法只用扫描一遍数组,时间复杂度为 O(n)。

不过测试用例有些奇怪,-.456居然被认为是一个合法的数字,所以只能将判断正负号后在判断下一个字符是否是数字的代码去掉,才能通过。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
bool isNumeric(char* string)
{
return isNumeric(string,true,true,true);

}
bool isNumeric(char* string,bool canNegative,bool canDecimal, bool canExp){
if(string==NULL || string[0]=='\0') return false;
if(*string=='+' || *string=='-'){
if(canNegative) string++;
else return false;
}
while(*string!='\0'){
if(*string=='.'){
if(canDecimal) return isNumeric(++string,false,false,true);
else return false;
}else if(*string=='e' || *string=='E'){
if(canExp) return isNumeric(++string,true,false,false);
else return false;
}
else if(!isNumber(*string)){
return false;
}
string++;
}
return true;
}
bool isNumber(char ch){
if(ch>='0' && ch<='9') return true;
return false;
}

};