美文网首页剑指 Offer Java版
剑指Offer Java版 面试题20:表示数值的字符串

剑指Offer Java版 面试题20:表示数值的字符串

作者: 孙强Jimmy | 来源:发表于2019-07-15 21:54 被阅读953次

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

    练习地址

    https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2

    参考答案

    和书上稍微不同,但更易于理解,且时间复杂度相同。

    public class Solution {
        public boolean isNumeric(char[] str) {
            if (str == null || str.length == 0) {
                return false;
            }
            boolean hasDot = false, hasE = false;
            for (int i = 0; i < str.length; i++) {
                if (str[i] == '.') {
                    if (hasDot) {
                        // 已经出现过'.'
                        return false;
                    } else {
                        hasDot = true;
                    }
                } else if (isE(str[i])) {
                    if (hasE) {
                        // 已经出现过'E'
                        return false;
                    }
                    // 'E'后面不会再出现'E'和'.'
                    hasE = true;
                    hasDot = true;
                } else if (isPlusMinus(str[i])) {
                    if (i != 0 && (!hasE || !isE(str[i - 1]))) {
                        // '+''-'不是第一个且前面不是'E'
                        return false;
                    }
                } else if (!isNumber(str[i])) {
                    return false;
                }
            }
            // 最后一个不是'E'
            return !isE(str[str.length - 1]);
        }
        
        private boolean isE(char c) {
            return c == 'E' || c == 'e';
        }
        
        private boolean isPlusMinus(char c) {
            return c == '+' || c == '-';
        }
        
        private boolean isNumber(char c) {
            return c >= '0' && c <= '9';
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n)。
    • 空间复杂度:O(1)。

    👉剑指Offer Java版目录
    👉剑指Offer Java版专题

    相关文章

      网友评论

        本文标题:剑指Offer Java版 面试题20:表示数值的字符串

        本文链接:https://www.haomeiwen.com/subject/dezokctx.html