• 字节跳动

AC 代码

`// 解决方案(1)class Solution {    public boolean isNumber(String s) {        Map[] states = {            new HashMap<>() {{ put(' ', 0); put('s', 1); put('d', 2); put('.', 4); }}, // 0.            new HashMap<>() {{ put('d', 2); put('.', 4); }},                           // 1.            new HashMap<>() {{ put('d', 2); put('.', 3); put('e', 5); put(' ', 8); }}, // 2.            new HashMap<>() {{ put('d', 3); put('e', 5); put(' ', 8); }},              // 3.            new HashMap<>() {{ put('d', 3); }},                                        // 4.            new HashMap<>() {{ put('s', 6); put('d', 7); }},                           // 5.            new HashMap<>() {{ put('d', 7); }},                                        // 6.            new HashMap<>() {{ put('d', 7); put(' ', 8); }},                           // 7.            new HashMap<>() {{ put(' ', 8); }}                                         // 8.        };        int p = 0;        char t;        for(char c : s.toCharArray()) {            if(c >= '0' && c <= '9') t = 'd';            else if(c == '+' || c == '-') t = 's';            else if(c == 'e' || c == 'E') t = 'e';            else if(c == '.' || c == ' ') t = c;            else t = '?';            if(!states[p].containsKey(t)) return false;            p = (int)states[p].get(t);        }        return p == 2 || p == 3 || p == 7 || p == 8;    }}// 解决方案(2)class Solution {    public boolean isNumber(String s) {        s = s.trim().toLowerCase();        if (s.length() == 0) {            return false;        }        String[] split = s.split("e");        if (split.length > 2) {            return false;        } else if (split.length == 2 && s.charAt(s.length() - 1) != 'e') {            return isOkay(split[0]) && isInteger(split[1]);        } else if (split.length == 1) {            return isOkay(s);        }        return false;    }    private boolean isOkay(String s) {        return isInteger(s) || isDecimal(s);    }    private boolean isInteger(String s) {        if (s.length() == 0) {            return false;        }        char[] chars = s.toCharArray();        // 先解决第一个, 省得后面 for 一直要判断 "+"、"-"        char c = chars[0];        if (c >= 'a' && c <= 'z' || c == ' ' || c == '.') {            return false;        } else if ((c == '+' || c == '-') && s.length() == 1) {            return false;        }        for (int i = 1; i < chars.length; i++) {            c = chars[i];            if (c >= 'a' && c <= 'z' || c == ' ' || c == '.' || c == '+' || c == '-') {                return false;            }        }        return true;    }    private boolean isDecimal(String s) {        if (s.length() == 0) {            return false;        }        char[] chars = s.toCharArray();        boolean dot = true;        // 先解决第一个, 省得后面 for 一直要判断 "+"、"-"、"."        char c = chars[0];        if (c >= 'a' && c <= 'z' || c == ' ') {            return false;        } else if ((c == '+' || c == '-') && s.length() == 1) {            return false;        } else if ((c == '+' || c == '-') && chars[1] == '.' && s.length() == 2) {            return false;        } else if (c == '.') {            if (s.length() == 1) {                return false;            }            dot = false;        }        for (int i = 1; i < chars.length; i++) {            c = chars[i];            if (c == '.') {                if (dot) {                    dot = false;                } else {                    return false;                }            }            else if (c >= 'a' && c <= 'z' || c == ' ' || c == '+' || c == '-') {                return false;            }        }        return true;    }}// 解决方案(3)class Solution {    public boolean isNumber(String s) {        try {            char c = Character.toLowerCase(s.charAt(s.length() - 1));            if ('f' == c || 'd' == c) {                return false;            }            Double.valueOf(s);            return true;        } catch (NumberFormatException e) {            return false;        }    }}`