LeetCode 65. Valid Number---シンプルで効率的な8 ms

3630 ワード

/************************************************************************ * * 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. * * ************************************************************************/ この問題は非常に煩雑で、長い間修正して、すべて抜け穴があって、ネットユーザーのプログラムを参考にして、得た以下のコードは非常に簡潔で、同時にとても効率的です.
bool isNumber(string s) {
    if (s.empty()) return false;
    int i = 0, len = s.size(), count_point = 0, count_num = 0, count_e = 0;
    while (i<len && s[i] == ' ') ++i; //    
    if (i<len && (s[i] == '+' || s[i] == '-')) ++i;  //   
    while (i<len && (isdigit(s[i]) || s[i] == '.'))  //   .
        s[i++] == '.' ? ++count_point : ++count_num; //   .       ,  false
    if (count_point>1 || count_num<1) return false;  //      .,   1   ,    ,  1.  
    if (i<len && s[i] == 'e') {
        ++i;
        if (i<len && (s[i] == '+' || s[i] == '-')) ++i; //e     +,-
        while (i<len && isdigit(s[i])) { ++i; ++count_e; }
        if (count_e<1) return false;  //e       
    }
    while (i<len && s[i] == ' ') ++i;
    return i == len;
}