剑指Offer-表示数值的字符串-3

表示数值的字符串

http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2

    // 方法3:直接使用IF-ELSE进行判断,覆盖所有可能
    // 思路:直接使用IF-ELSE语句扫描每个字符,每次遇到不同类别的字符时,则结合已接收的字符
    // 判断是否符合对应的要求.这种思路相比于其他几种方式的缺陷在于,
    // 容易遗漏各种可能性(当然一方面也是题目的问题).
    // 接收字符集:[0-9],[Ee],[.],[+-],other
    // 时间复杂度:O(n),空间复杂度:O(1)
    public boolean isNumeric(char[] str) {
        // 排除边界条件
        if (str == null || str.length == 0) return false;
        // 遍历字符数组,按照字符集类别进行不同的处理,每次都向过去检索(而不向后检索),统一检索方向,避免重复运算
        boolean hasSign = false, hasPoint = false, hasE = false; // 之前是否出现过[+-]/[.]/[Ee]字符
        char c;
        for (int i = 0; i < str.length; i++) {
            c = str[i];
            // 如果接收的是[Ee]字符
            if (c == 'E' || c == 'e') {
                // [Ee]字符只能出现一次
                if (hasE) return false;
                    // [Ee]字符之前必须为[0-9]字符
                else if (i - 1 < 0 || str[i - 1] < '0' || str[i - 1] > '9') return false;
                hasE = true;
            }
            // 如果接收的是[+-]字符
            else if (c == '+' || c == '-') {
                // [+-]如果之前出现过,那么当前字符之前必须为[Ee]字符
                if (hasSign && str[i - 1] != 'E' && str[i - 1] != 'e') return false;
                    // [+-]如果之前未出现过,那么当前字符必须为首字符,或者前面为[Ee]字符
                else if (!hasSign && i != 0 && str[i - 1] != 'E' && str[i - 1] != 'e') return false;
                hasSign = true;
            }
            // 如果接收的是[.]字符
            else if (c == '.') {
                // [.]字符只能出现一次,且之前不能出现过[Ee]字符,PS:[.]字符之前可以为空/[0-9]/[+-]
                if (hasPoint || hasE) return false;
                hasPoint = true;
            }
            // 其次如果接收的是非数字字符,则直接返回false
            else if (c < '0' || c > '9') return false;
        }
        // 字符结尾必须为数字
        return str[str.length - 1] >= '0' && str[str.length - 1] <= '9';
    }
全部评论

相关推荐

把实习生当正职使昨天第一天就加班,晚上连口饭都没吃上,以后日子咋过,我不想干了
码农索隆:实习不怕忙,就怕干的活重复且没难度,要干就干那种有深度有难度的任务,这样才能快速的提升
实习吐槽大会
点赞 评论 收藏
分享
今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面6人在聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务