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;
}