Valid Number

Validate if a given string can be interpreted as a decimal number.

Some examples: "0" => true " 0.1 " => true "abc" => false "1 a" => false "2e10" => true " -90e3 " => true " 1e" => false "e3" => false " 6e-1" => true " 99e2.5 " => false "53.5e93" => true " --6 " => false "-+3" => false "95a54e53" => false

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

  • Numbers 0-9

  • Exponent - "e"

  • Positive/negative sign - "+"/"-"

  • Decimal point - "."

Of course, the context of these characters also matters in the input.

思路:

去掉 手尾的空格

用i trace 现在都到哪了,根据正确 的格式来判断,注意trim后加一个空格

class Solution {
    public boolean isNumber(String s) {
        
        if(s== null || s.length() == 0){
            return false;
        }
        
        s = s.trim()+" ";//给最后的for循环 i < len 后 i == len 判断留的
        
        int i  = 0, len = s.length()-1;
        
        char[] charArr = s.toCharArray();
            
        if(charArr[i] == '+' || charArr[i] == '-'){
            i++;
        }
        
        int isDigit = 0, isPoint = 0;
        
        while(Character.isDigit(charArr[i]) || charArr[i] == '.'){
            if(Character.isDigit(charArr[i])){
                isDigit++;
            }
            
            else if(charArr[i] == '.'){
                isPoint++;
            }
            
            i++;
        }
        
        if(isDigit <= 0 || isPoint >1){
            return false;
        }
        
        if(charArr[i] == 'e'){
            i++;
            if(charArr[i] == '+' || charArr[i] == '-'){
                i++;
            }
            if(i == len){
                return false;
            }
            
            for(;i<len;i++){
                if(!Character.isDigit(charArr[i])){
                    return false;
                }
            }
            
            
        }
        
        return i == len;
        
        
    }
}

没有e的版本

// 00 false
// 5. 5- false
// -0 true 如果这个test要求是false, 只需要在最前面加一个s.equals("-0")的判断就行

public class Solution {
    public boolean isNumber(String s) {
        s = s.trim();
                boolean pointSeen = false, numberSeen = false;
        int len = s.length();
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            if (!numberSeen && c=='0' && i<len-1 && s.charAt(i+1)=='0') {
                return false;
            }
            if (c >= '0' && c <= '9') {
                numberSeen = true;
            } else if (c == '.') {
                if (pointSeen || i == len - 1) {
                    return false;
                }
                pointSeen = true;
            } else if (c == '+' || c == '-') {
                if (i != 0) {
                    return false;
                }
            } else {
                return false;
            }
        }
        return numberSeen;
    }
}

Last updated