65.有效数字(Valid Number)

题目描述

验证给定的字符串是否为数字。

例如:
“0” => true
" 0.1 " => true
“abc” => false
“1 a” => false
“2e10” => true

说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。

解题思路

这题算法上没难点,但是是真的烦!!!
最坑的就是你必须排除所有有效数字的情况

总结了几个比较容易忽视的情况:

首先记得去掉首尾的空白字符。

非有效数字的字符串:
. -. -.e10 5e e10 4e10.5 4e5e5
是有效数字的字符串:
+.8 -4.e10 -4.e-10 4.

代码实现

class Solution {
    public boolean isNumber(String s) {
        //s空
        if(s==null || s.trim().length()==0){ 
            return false;
        }
        s = s.trim();
        
        int numOfPoints = 0, numOfE = 0;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='-' || s.charAt(i) == '+'){
                if(i==s.length()-1)
                    return false;
                if(i>0 && s.charAt(i-1)!='e'){
                    return false;
                }
                
            }else if(s.charAt(i)=='.'){
                if(s.length()==1)
                    return false;
                if(i==0&& !isDigit(s.charAt(i+1)) || 
                   i==s.length()-1 && !isDigit(s.charAt(i-1)) || 
                   i>0 && i<s.length() && !isDigit(s.charAt(i-1)) && !isDigit(s.charAt(i+1))){
                    return false;
                }
                if(numOfE>0)
                    return false;
                numOfPoints++;
                if(numOfPoints>1)
                    return false;
                
            }else if(s.charAt(i)>'9' || s.charAt(i)<'0'){
                if(s.charAt(i)=='e'){
                    if(i==s.length()-1 || i==0)
                        return false;
                    if(!isDigit(s.charAt(i-1)) && s.charAt(i-1)!='.')
                        return false;
                    numOfE++;
                    if(numOfE>1)
                        return false;
                }else{
                    return false;
                }
            }
        }
        
        return true;
    }
    
    public static boolean isDigit(char i){
        if(i>='0' && i<='9'){
            return true;
        }
        return false;
    }
}

你可能感兴趣的:(算法,LeetCode)