剑指offer笔记——20. 表示数值的字符串(考虑特殊情况即可)

原题
剑指offer笔记——20. 表示数值的字符串(考虑特殊情况即可)_第1张图片

思路

既然来判断,字符串是否表示数值,将字符串转成字符数组,那么便将几种特殊情况判断一下就知道了。
设置几个标签,来判断情况,初始值都为false
num:是否出现0-9
dot:是否出现小数点
eE:是否出现e,E

  1. 正常情况是数字,0-9
  2. 若是小数点
    小数点之前不能有小数点和E,e符号,否则返回false
  3. e,E
    e,E之前不能出现e,E,前面必须有数字出现,否则返回false,并且出现e,E之后,需要重置数字位num。
  4. +号,-号
    加减号只能在第一位出现,或者出现在e,E之后,否则返回false
  5. 除上述情况之外的其他符号出现
    立即返回false

话不多说,上代码

代码

class Solution {
    public boolean isNumber(String s) {
        if(s.length()==0){
            return false;
        }
        boolean num=false;
        boolean dot=false;
        boolean eE=false;
        boolean isok=false;
        char []str=s.trim().toCharArray();
        for(int i=0;i<str.length;i++){
            if(str[i]>='0'&&str[i]<='9'){
                num=true;
            }
            else if(str[i]=='.'){
                if(dot||eE){
                    return false;
                }
                dot=true;
            }
            else if(str[i]=='e'||str[i]=='E'){
                if(eE||!num){
                    return false;
                }
                eE=true;
                num=false;

            }
            else if(str[i]=='-'||str[i]=='+'){
                if(i!=0&&str[i-1]!='e'&&str[i-1]!='E'){
                    return false;
                }
            }
            else{
                return false;
            }

        }
        return num;

    }
}

你可能感兴趣的:(java学习,leetcode刷题总结,剑指offer,字符串,剑指offer)