Valid Number leetcode

Valid Number 

本题需要注意的是边界条件设置过多,因此通过率不高。

"0" => true     //单个
" 0.1 " => true //两边空格先去掉 有小数点的情况
"abc" => false  //有非e字母的情况
"1 a" => false //有非e字母的情况
"2e10" => true//有e字母的情况

除了上述题目给出的边界条件以外,还有下述需要注意的例子:

" 005047e+6"=> true//有e字母和符号的情况

"32.e-80123"=> true//有e字母和符号和小数点的情况

"46.e3"=> true//有e字母和小数点的情况

".e1"=>false //.e之前无数字的情况

" -."=>false//无数字的情况

"+.8"=> true//有符号和小数点的情况

"-1."=> true//有符号和小数点的情况

"."=>false//单个

AC代码:

class Solution {
public:
    bool isNum(char n){
        if(n<'0'||n>'9')
            return false;
        return true;
    }
    bool isNumber(string s) {
        if(!s.size())
          return false;
        int p=0,q=s.size()-1,flage=0,flagp=0;
         //去掉首尾空格
        while(s[p]==' '){p++;}
        while(s[q]==' '){q--;}
        //e符号不能在头和尾 不能全为空格
        if(s[p]=='e'||s[q]=='e'||p>q)
           return false;
        //开头可以有符号
        if(s[p]=='-'||s[p]=='+') p++;
        if(p==q){
            if(isNum(s[p]))return true;
            else return false;
        }
        for(int i=p;i<=q;i++){
            if(s[i]=='.'){
                // '.e'组合情况 后面要跟数字或者符号数字  注意先判断i不要越界
                if(i<q-1&&s[i+1]=='e'&&isNum(s[i-1])){
                    if(isNum(s[i+2])) i+=2;
                    else if(i<q-2&&(s[i+2]=='-'||s[i+2]=='+')&&isNum(s[i+3]))
                       i+=3;
                    else return false;
                    flagp=1;
                    continue;
                }
                // '.'只能出现一次,后面必须有数字
                else if(flage||flagp||(i>=p+1&&!isNum(s[i-1]))||(i<=q-1&&!isNum(s[i+1])))
                  return false;
                flagp=1;
            }
            
            else if(s[i]=='e'){
                // 'e'后面有符号时再后面必须有数字
                if(i<q-1&&(s[i+1]=='-'||s[i+1]=='+')&&isNum(s[i+2]))
                  {flage=1;i+=2;continue;}
                  // 'e'只能出现一次,前后必须有数字
                 if(flage||!(isNum(s[i-1])&&isNum(s[i+1])))
                  return false;
                flage=1;
            }
            else if(!isNum(s[i]))
               return false;
        }
        return true;
    }
};



 
 
运行时间:


本题看其他大神也可以用有限状态机


猜你喜欢

转载自blog.csdn.net/maryhaocoolcool/article/details/51982703