0%

剑指 Offer 20. 表示数值的字符串

剑指 Offer 20. 表示数值的字符串

常规思路
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Solution {
public:
bool isNumber(string s) {
int start = 0, end = s.size() - 1;
while(start < end && s[start] == ' ')
++start;
while(end > start && s[end] == ' ')
--end;
if(start > end)
return false;
if(s[start] == '+' || s[start] == '-')
++start;
bool isMeetDigital = false;
bool isMeetDot = false;
bool isMeetE = false;
for(int i = start; i <= end; ++i)
{
if(isDigital(s[i]))
{
isMeetDigital = true;
}
else if(s[i] == '.' && !isMeetDot)
{
if(isMeetE)
return false;
isMeetDot = true;
if(!isMeetDigital)
{
if(i >= end)
return false;
else if(!isDigital(s[++i]))
return false;
else
isMeetDigital = true;
}
}else if(s[i] == 'e' || s[i] == 'E')
{
if(!isMeetDigital)
return false;
if(!isMeetE)
{
bool isSigned = false;
while(i < end && (s[++i] == '+' || s[i] == '-'))
{
if(isSigned)
return false;
isSigned = true;
}
if(i <= end && isDigital(s[i]))
{
isMeetE = true;
isMeetDigital = true;
}
else
return false;
}else
return false;
}
else
return false;
}
return true;
}
private:
bool isDigital(char& ch)
{
return ch <= '9' && ch >= '0';
}
};
状态机

1624440075950.png 1624440089788.png

太烦了 不想做