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

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100″、”5e2″、”-123″、”3.1416″、”-1E-16″、”0123″都表示数值,但”12e”、”1a3.14″、”1.2.3″、”+-5″及”12e+5.4″都不是。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方案

class Solution {
    private String string;
    private int index;

    public boolean isNumber(String s) {
        if (s == null) {
            return false;
        }
        string = s.trim();
        if (string.length() == 0) {
            return false;
        }
        index = 0;
        boolean result = scanInt();
        if (index < string.length() && string.charAt(index) == '.') {
            index += 1;
            result = scanUInt() || result;
        }
        if (index < string.length() 
                && (string.charAt(index) == 'e' || string.charAt(index) == 'E')) {
            index += 1;
            result = result && scanInt();
        }
        return result && (index == string.length());
    }

    private boolean scanInt() {
        if (index < string.length() 
                && (string.charAt(index) == '+' || string.charAt(index) == '-')) {
            index += 1;
        }
        return scanUInt();
    }

    private boolean scanUInt() {
        int before = index;
        while (index < string.length() 
                && '0' <= string.charAt(index) && string.charAt(index) <= '9') {
            index += 1;
        }
        return index > before;
    }
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据