zoukankan      html  css  js  c++  java
  • [leetcode] 65. 有效数字

    65. 有效数字

    第19次才通过,前面错了18次。。。

    相信我,不用理解或者分析我的代码,一遍一遍去自己尝试吧少年,十几次后你就会做出来了

    你会感受到这个题带来的诚意的

    class Solution {
        public boolean isNumber(String s) {
            // 去掉前后空格
            s = s.trim();
            if (s.length() == 0) return false;
            if (s.charAt(0) == '-' || s.charAt(0) == '+') {
                if (s.length() == 1) {
                    return false;
                }
                s = s.substring(1);
            }
            // 去掉前导0
            while (s.charAt(0) == '0') {
                if (s.length() == 1) {
                    // 就剩一个0了
                    return true;
                }
                if (s.charAt(1) == '.' || s.charAt(1) == 'e') {
                    // 应对比如0000.123这种情况
                    break;
                }
                s = s.substring(1);
            }
            // 处理e后面出现+-号的情况
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == 'e') {
                    if (i + 1 < s.length()) {
                        if (s.charAt(i + 1) == '-' || s.charAt(i + 1) == '+') {
                            String newS = "";
                            newS = s.substring(0, i + 1);
                            if (i + 2 < s.length()) {
                                newS += s.substring(i + 2);
                            }
                            s = newS;
                        }
                    }
                }
            }
    
            boolean flag = false;
            boolean dflag = false;
            boolean eflag = false;
            boolean numFlag = false;
            for (int i = 0; i < s.length(); i++) {
                char ch = s.charAt(i);
                if (!isnum(ch)) {
                    if (ch == '.' || ch == 'e') {
                        if (ch == 'e') {
                            // e前面必须有数字,而。不用
                            if (!numFlag) return false;
    
                        }
                        if (ch == 'e' && (i + 1 >= s.length())) {
                            // e后面必须有数字
                            return false;
                        }
                        if (flag) {
                            // 。 or e只能出现1次
                            if (ch == 'e' && dflag && !eflag) {
                                eflag = true;
                                continue;
                            }
                            return false;
                        }
    
                        if (ch == '.' && i + 1 < s.length() && s.charAt(i + 1) == 'e' && numFlag && i + 2 < s.length()) {
                            // 特判: .e  同时出现时- -
                            i++;
                        }
                        flag = true;
                        if (ch == '.') dflag = true;
                        if (ch == 'e') eflag = true;
                        continue;
                    }
                    return false;
                } else {
                    numFlag = true;
                }
            }
            return numFlag;
        }
    
        public boolean isnum(char ch) {
            return ch >= '0' && ch <= '9';
        }
    }
    
  • 相关阅读:
    Vue组件
    Vue内置指令
    [vue插件]基于vue2.x的电商图片放大镜插件
    Vue过渡与动画
    一个 VUE 组件:实现子元素 scroll 父元素容器不跟随滚动(兼容PC、移动端)
    ORM进阶之Hibernate中对象的三大状态解析
    jQuery的CSS操作
    SqlCommand.DeriveParameters failed
    Web Service学习-CXF开发Web Service实例demo(一)
    去哪网实习总结:如何配置数据库连接(JavaWeb)
  • 原文地址:https://www.cnblogs.com/acbingo/p/9363295.html
Copyright © 2011-2022 走看看