This problem asks you to determine whether a string is a valid number. However, the test cases are quite tricky… Perhaps I am just not skilled enough – my definition didn’t match the expected output, and I had to fix it many times. No wonder the acceptance rate for this problem is so low.
classSolution{public:boolisNumber(constchar*s){stringstr="";intlen=strlen(s);inti=0;for(;i<len;i++){if(s[i]==' ')continue;elsebreak;}for(;i<len;i++){str.push_back(s[i]);}for(inti=str.length()-1;i>=0;i--){if(str[i]==' '){str.erase(i);}elsebreak;}returnisNumberString(str);}private:boolisNumberString(strings){// Does it have a sign?
// Does it have a decimal point?
// Does it contain 'e'?
// Does it have leading zeros?
intlen=s.length();if(len<=0)returnfalse;if(len==1){if(s[0]<'0'||s[0]>'9')returnfalse;elsereturntrue;}intstart=0;if(s[0]=='+'||s[0]=='-'){start=1;}boolisZeroAllowed=true;boolisPotAllowed=false;boolisEallowed=false;boolonce=true;if(s[start]=='.'){if(len>=start+2){if(s[start+1]>='0'&&s[start+1]<='9'){isZeroAllowed=true;isPotAllowed=false;isEallowed=true;once=false;start=start+2;}elsereturnfalse;}elsereturnfalse;}for(inti=start;i<len;i++){if(s[i]=='.'&&isPotAllowed==false){returnfalse;}if(s[i]=='.'&&isPotAllowed==true){isPotAllowed=false;continue;}if(s[i]=='e'&&isEallowed==false){returnfalse;}if(s[i]=='e'&&isEallowed==true){isEallowed=false;isPotAllowed=false;once=false;if(i+1>=len)returnfalse;if(s[i+1]=='-'||s[i+1]=='+'){if(i+2>=len)returnfalse;if(s[i+2]<'0'||s[i+2]>'9')returnfalse;i+=2;continue;}if(s[i+1]<'0'||s[i+1]>'9')returnfalse;continue;}if(s[i]>='0'&&s[i]<='9'){if(once==true){isZeroAllowed=true;isPotAllowed=true;isEallowed=true;once=false;}continue;}returnfalse;}returntrue;}};