标签:style blog color io for art ar cti
这道题真心是难度比较大,不是算法难度,是实现难度,
各种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 else 27 dotAppear = true; 28 } 29 else if (*s == ‘e‘ || *s == ‘E‘) 30 { 31 if (eAppear || !firstPart || spaceAppear) 32 return false; 33 else 34 eAppear = true; 35 } 36 else if (isdigit(*s)) 37 { 38 if (spaceAppear) 39 return false; 40 41 if (!eAppear) 42 firstPart = true; 43 else 44 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 else 57 return false; 58 59 s++; 60 } 61 62 if (!firstPart) 63 return false; 64 else if (eAppear && !secondPart) 65 return false; 66 else 67 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 else 47 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 };
LeetCode--Valid Number,布布扣,bubuko.com
标签:style blog color io for art ar cti
原文地址:http://www.cnblogs.com/cane/p/3901521.html