剑指 Offer 20. 表示数值的字符串

这个题很烦。不告诉什么样的数字是合法的,面向测试用例编程。
最简单的思路。

class Solution {
    public boolean isNumber(String s) {
        char[] ss=s.trim().toCharArray();
        boolean hasNum=false,hasSign=false,hasE=false,hasDot=false;
        int m=ss.length;
        for(int i=0;i<m;i++){
            if(ss[i]=='+'||ss[i]=='-')//第一个字符是+,-号
            {   if(hasSign||hasNum)
                   return false;
               else
                   hasSign=true;
            }
            else if(ss[i]=='e'||ss[i]=='E') {
                if(hasE||!hasNum)
                    return false;
                else{//E后面不能有小数,必须有正整数或负整数,不能有E
                    hasE=true;
                    hasSign=false;
                    hasNum=false;
                }
            }
            else if(ss[i]=='.'){
                if(hasDot||hasE)
                    return false;
                else{
                    hasSign=true;
                    hasDot=true;
                }
            }
            else if(ss[i]>='0'&&ss[i]<='9')
                hasNum=true;
            else
                return false;
        }

        if(!hasNum)
            return false;

        return true;
    }
}
posted @ 2021-03-15 16:41  wsshub  阅读(46)  评论(0)    收藏  举报