leetcode 65. Valid Number

来源:互联网 发布:linux虚拟机kvm怎么用 编辑:程序博客网 时间:2024/05/22 12:48

65. Valid Number

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.

class Solution {public:    bool isNumber(string s)     {        int k = 0;        while (1) //先去除开头的空格        {            if(s[k] == ' ')                s = s.substr(1, s.size()-1);            else                break;        }        if(s.size() == 0)            return 0;                while(1) //去除末尾的空格        {            k = s.size()-1;            if(s[k]==' ')                s = s.substr(0, s.size()-1);            else                break;        }            k = 0;           int flag = 0;   //记录有没有 '.'        int flag3 = 0;  //记录有没有 '-' 或者 '+'        int flag4 = 0;  //记录有没有 'e'        while (k < s.size())        {            if(int(s[k]) >= 48 && int(s[k]) <= 57)   // 0 - 9            {                k++;                   continue;             }            else if(int(s[k]) == 46 && flag == 0 && flag4 == 0)  // '.'            {                flag = 1;                if (k == 0 && s.size() == 1)//  排除"."                     return 0;                else if(k != 0 && k < s.size() - 2 && s[k+1] == 'e')   //  "14.e3" true                {                    k++;                       continue;                }                else if (k != s.size() - 1 && (int(s[k+1]) < 48 || int(s[k+1]) > 57)) // '.'后面是非法的字母等                    return 0;                   else if (k == s.size() - 1 && s[k-1] == '-' && k > 0)  // 排除 "-."                    return 0;                else                {                    k++;                       continue;                }            }            else if (int(s[k]) == 101 && k != 0 && k != s.size() - 1 && s[k+1] != '.' && flag4 == 0)  // 'e'            {                flag4 = 1;                if (k == 1 && (int(s[k-1]) < 48 || int(s[k-1]) > 57)) //'e'之前的非法字母                    return 0;                else                {                    k++;                       continue;                 }            }            else if (int(s[k]) == 45)  // -            {                 if (flag3 == 0 || (k > 0 && s[k-1] == 'e'))     //只有 "-23" 或者 "2e-3" 才可以                {                      flag3 = 1;                    if((s[k-1] == 'e' && k != s.size()-1) || (k == 0 && s.size() != 1))  // 排除"2e-"                     {                         k++;                           continue;                    }                    else                        return 0;                }                else                    return 0;            }            else if (int(s[k]) == 43 && k != s.size()-1)    //+            {                if (flag3 == 0 || (k > 0 && s[k-1] == 'e'))  //只有 "+23" 或者 "2e+3" 才可以                {                    flag3=1;                    if(s[k+1] == '.' && k + 1 != s.size()-1)      // "+.3" true                    {                        k++;                           continue;                      }                    else if(k == 0)                    {                        k++;                           continue;                      }                    else if(k != 0 && s[k-1] == 'e' && k != s.size() - 1)                    {                        k++;                           continue;                      }                    else                        return 0;                }                else                    return 0;            }            else                return 0;        }        return 1;    }};


原创粉丝点击