Saturday, 19 December 2015

LeetCode Valid Number so many corner cases

LeetCode Valid Number so many corner cases

class Solution {

public:

    bool isNumber(string s) {

       int i,j,n=s.size();

       char prev;

       bool dot=false;

       int is_digit=0;

       bool is_e=false;

       j=0;

           while(j<n && s[j]==' ')

            j++;

           if(j==n)

            return false;

           if(s[j]!='-' && s[j]!='+' && s[j]!='.' && !(s[j]>='0' && s[j]<='9'))

            return false;

           if(s[j]=='-' || s[j]=='+' || s[j]=='.')

           {

             dot=(s[j]=='.');

             j++;

           }

            if(j==n)

             return false;

           while(j<n && (s[j]=='e' || s[j]=='+' || s[j]=='-' || s[j]=='.' || (s[j]>='0' && s[j]<='9'))){

             if((s[j]=='+' || s[j]=='-') && s[j-1]!='e')

              return false;

             if(s[j]=='e')

             {

               if(is_digit==0)

                 return false;

               else if(is_e==true)

                return false;

               else

                 is_e=true;

             }

             if(s[j]=='.'){

              if(is_e)

                return false;

              if(dot)

               return false;

              else

               dot=true;

             }

             if((s[j]>='0' && s[j]<='9'))

               is_digit=1;

             j++;

           }

           if(j==n && is_digit==1 && s[j-1]!='e' && s[j-1]!='+' && s[j-1]!='-')

            return true;

           else

           {

            if(j<n){

                int idx=j;

                while(j<n && s[j]==' ')

                 j++;

                if(j==n && is_digit==1 && s[idx-1]!='e'&& s[j-1]!='+' && s[j-1]!='-')

                 return true;

                else

                 return false;

            }

            return false;

           }

    }

};

No comments:

Post a Comment