leetcode valid number

来源:互联网 发布:java 字符串比较 编辑:程序博客网 时间:2024/06/03 23:44

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">果然是恶心人的题目。错了10次才AC。</span>

大概看看代码就知道了:

class Solution {public:    bool isNumber(const char *s) {//valid chars: numbers, one dot not at either side, one 'e' not at either side, '-' at begin or before e//is these valid?: " 0 . 1 e 1 0 ", " - 0 e - 0"int i = 0, n = strlen(s), start = 0;int ie = -1, id = -1, ineg = -1, inege = -1, ipose = -1;char c = s[i];while (c == ' '){c = s[++i];}if (c == '-' || c == '+'){ineg = i;c = s[++i];}start = i;n--;while (n >= 0){if (s[n] == ' '){n--;}else{break;}}if (start == n && !isdigit(c) ){return false;}while (i <= n){if (isdigit(c)){c = s[++i];continue;}if (c == '.'){if (id >= 0){return false;}id = i;c = s[++i];}else if (c == 'e'){if (ie >= 0){return false;}ie = i;c = s[++i];}else if (c == '-'){if (inege >= 0){return false;}inege = i;c = s[++i];}else if (c == '+'){if (ipose >= 0){return false;}ipose = i;c = s[++i];}else{return false;}}while (s[i]){if (s[i] != '\0' && s[i] != ' '){return false;}i++;}if ((inege >= start) && (inege == n || inege == start || inege - ie != 1)){return false;}if ((ipose >= start) && (ipose == n || ipose == start || ipose - ie != 1)){return false;}if (ie == start || ie == n  ){return false;}if (ie >start && id >= start){if (ie - id < 0 || (id == start && ie == id + 1)){return false;}}return true;}};


有人说用Python的偷法是:

def isNumber(self, s):    try:        float(s)        return True    except:        return False

还有人说这是oj上最烂的题目,好多人顶。

0 0
原创粉丝点击