[LeetCode] 65. Valid Number(多个标志位)
【思路】该题题干不是很明确,只能根据用例来理解什么样的字符串才是符合题意的,本题关键在于几个标志位的设立,将字符串分为几个部分,代码如下:
1 class Solution 2 { 3 public: 4 string trim(string s) 5 { 6 int i=0; 7 while(s[i]==' ') i ++; //开头处为空格或者Tab,则跳过 8 s=s.substr(i); 9 i=s.size()-1; 10 while(s[i]==' ') i --; //结尾处为空格或者Tab,则跳过 11 s=s.substr(0,i+1); 12 return s; 13 } 14 bool isNumber(string s) 15 { 16 s = trim(s); 17 18 bool pointSeen = false; 19 bool eSeen = false; 20 bool partOne = false; 21 bool partTwo = false; 22 23 for(int i = 0; i < s.length(); i ++) 24 { 25 if(s[i] >= '0' && s[i] <= '9') 26 { 27 if(!eSeen) 28 partOne = true; 29 else 30 partTwo = true; 31 } 32 else if(s[i] == '.') 33 { 34 if(pointSeen || eSeen) 35 return false; 36 pointSeen = true; 37 } 38 else if(s[i] == 'e') 39 { 40 if(eSeen || !partOne) 41 return false; 42 eSeen = true; 43 } 44 else if(s[i] == '+' || s[i] == '-') 45 { 46 if(i != 0 && s[i - 1] != 'e') 47 return false; 48 } 49 else return false; 50 } 51 if(!partOne) 52 return false; 53 else if(eSeen && !partTwo) 54 return false; 55 else 56 return true; 57 } 58 };