首页 > 代码库 > LeetCode--Valid Number
LeetCode--Valid Number
这道题真心是难度比较大,不是算法难度,是实现难度,
各种case都得考虑到。
我没有A过,一开始就把.1这种case当做是错误的。导致程序逻辑乱套了。
下面是别人的代码:
1 class Solution { 2 public: 3 bool isNumber(const char *s) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if (s == NULL) 7 return false; 8 9 while(isspace(*s))10 s++;11 12 if (*s == ‘+‘ || *s == ‘-‘)13 s++;14 15 bool eAppear = false;16 bool dotAppear = false;17 bool firstPart = false;18 bool secondPart = false;19 bool spaceAppear = false;20 while(*s != ‘\0‘)21 {22 if (*s == ‘.‘)23 {24 if (dotAppear || eAppear || spaceAppear)25 return false;26 else27 dotAppear = true;28 }29 else if (*s == ‘e‘ || *s == ‘E‘)30 {31 if (eAppear || !firstPart || spaceAppear)32 return false;33 else34 eAppear = true;35 }36 else if (isdigit(*s))37 {38 if (spaceAppear)39 return false;40 41 if (!eAppear)42 firstPart = true;43 else44 secondPart = true;45 }46 else if (*s == ‘+‘ || *s == ‘-‘)47 {48 if (sapceAppear)49 return false;50 51 if (!eAppear || !(*(s-1) == ‘e‘ || *(s-1) == ‘E‘))52 return false;53 }54 else if (isspace(*s))55 spaceAppear = true;56 else57 return false;58 59 s++; 60 }61 62 if (!firstPart)63 return false;64 else if (eAppear && !secondPart)65 return false;66 else67 return true;68 }69 };
下面是我自己没A过的代码:
本来想是先处理首尾空格,然后对处理后的字符判断;
判断完初步合法以后就判断小数点和e的位置分成两半分别处理判断。
leetcode对于:“+.8”这种case是认为是对的
1 class Solution { 2 public: 3 bool isNumber(const char *s) { 4 string str(s); 5 if(str == "") 6 return true; 7 int i = 0; 8 int j = str.length()-1; 9 while(isspace(str[i]))10 {11 ++i;12 }13 while(isspace(str[j]))14 --j;15 str = str.substr(i,j-i+1);16 if(str == "")17 return false;18 if(str.length() == 1 && !isdigit(str[0]))19 return false;20 if(!isdigit(str[str.length()-1]) && str[str.length()-1] != ‘.‘)21 return false;22 if(!isdigit(str[0]) && str[0] != ‘+‘ && str[0] != ‘-‘ && str[0] != ‘.‘)23 return false;24 return isNumber_1(str);25 }26 //这个输入保证首尾都是合法的,并且是非空的27 bool isNumber_1(string s)28 {29 int i = 0;30 bool isE = false;31 for(; i < s.length() ; ++i)32 {33 if(s[i] == ‘.‘ || s[i] == ‘e‘ || s[i] == ‘E‘)34 {35 if(s[i] != ‘.‘)36 isE = true;37 break;38 }39 }40 string leftpart = s.substr(0,i);41 if(!isNumber_2(leftpart))42 return false;43 string rightpart;44 if(i+1 >= s.length())45 rightpart = "";46 else47 rightpart = s.substr(i+1,s.length()-i);48 if(rightpart == "")49 return true;50 if(!isE)51 {52 if(!isdigit(s[i+1]))53 return false;54 }55 return isNumber_2(rightpart);56 }57 bool isNumber_2(string s)58 {59 if(s == "")60 return true;61 if(s[0] == ‘+‘ || s[0] == ‘-‘)62 {63 return isNumber_3(s.substr(1,s.length()-1));64 }65 else if(!isdigit(s[0]))66 {67 return false;68 }69 return isNumber_3(s);70 }71 bool isNumber_3(string s)72 {73 if(s == "")74 return false;75 int i=0;76 while(i < s.length())77 {78 if(!isdigit(s[i]))79 return false;80 ++i;81 }82 return true;83 }84 };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。