Leetcode之Valid Number

来源:互联网 发布:游戏源码怎么用 编辑:程序博客网 时间:2024/05/19 16:36

题目:

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

要写对这题着实不容易,很多细节需要考虑。先看看测试用例有哪些,然后再写就比较有针对性。最后看看哪些test case错了,再修一下bug。

 C++ Code 
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
70
71
class Solution
{
public:
    bool isNumber(const char *s)
    {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (s == NULL)
            return false;

        while(isspace(*s))
            s++;

        if (*s == '+' || *s == '-')
            s++;

        bool eAppear = false;
        bool dotAppear = false;
        bool firstPart = false;
        bool secondPart = false;
        bool spaceAppear = false;
        while(*s != '\0')
        {
            if (*s == '.')
            {
                if (dotAppear || eAppear || spaceAppear)
                    return false;
                else
                    dotAppear = true;
            }
            else if (*s == 'e' || *s == 'E')
            {
                if (eAppear || !firstPart || spaceAppear)
                    return false;
                else
                    eAppear = true;
            }
            else if (isdigit(*s))
            {
                if (spaceAppear)
                    return false;

                if (!eAppear)
                    firstPart = true;
                else
                    secondPart = true;
            }
            else if (*s == '+' || *s == '-')
            {
                if (spaceAppear)
                    return false;

                if (!eAppear || !(*(s - 1) == 'e' || *(s - 1) == 'E'))
                    return false;
            }
            else if (isspace(*s))
                spaceAppear = true;
            else
                return false;

            s++;
        }

        if (!firstPart)
            return false;
        else if (eAppear && !secondPart)
            return false;
        else
            return true;
    }
};

0 0
原创粉丝点击