• leetcode65- Valid Number- hard


    Validate if a given string is numeric.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

    几个要考虑的情况:整数,小数decimal,正号负号,科学计数法。问:1e9   .5, 6.可以吗(可以)?  e可以和小数一起出现吗 0.5e100 (e前面可以有小数后面不行)

    可以允许的符号有:'0'~'9'  '.'  'e' '+-'   

    规则有:

    1. 必须有数字出现过,单独的'.' 'e' '+-' 都不是数字。所以最后返回numSeen && eSeen

    2. '.' 只可以出现一次,而且不能出现在e后面。

    3.'e'只可以出现一次,而且前后都必须有数字。

    4.'+-' 必须在最前面,或者紧跟在e后面。

    5. ' ' 不能出现在中间,但可以在头尾。用s = s.trim()解决(这点面试的时候就别讲了吧,太刻意了)

    实现:

    class Solution {
    //1. '.' 只可以出现一次,而且不能出现在e后面,而且后面必须有数字。
    //2.'e'只可以出现一次,而且前后都必须有数字。
    //3.'+-' 必须在最前面,或者紧跟在e后面。
    //4. ' ' 不能出现在中间,但可以在头尾。(这点面试的时候就别讲了吧,太刻意了)
    //可以允许的符号有:'0'~'9'  '.'  'e' '+-'   
    
        public boolean isNumber(String s) {
            // 要先去掉头尾的空格
            s = s.trim();
            boolean numSeen = false;
            boolean pointSeen = false;
            boolean eSeen = false;
            boolean hasNumAfterE = false;
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (c >= '0' && c <= '9') {
                    numSeen = true;
                    if (eSeen) {
                        hasNumAfterE = true;
                    }
                } else if (c == '.') {
                    if (pointSeen || eSeen) {
                        return false;
                    }
                    pointSeen = true;
                } else if (c == 'e') {
                    if (eSeen || !numSeen) {
                        return false;
                    }
                    eSeen = true;
                } else if (c == '+' || c == '-') {
                    if (i != 0 && s.charAt(i - 1) != 'e') {
                        return false;
                    }
                } else {
                    return false;
                }
            }
            if (eSeen) {
                return numSeen && hasNumAfterE;
            }
            return numSeen;
        }
    }
  • 相关阅读:
    vue路由对象($route)参数简介
    原生js写ajax请求(复习)
    js,jq.事件代理(事件委托)复习。
    CSS 设置table下tbody滚动条
    H5 调用手机摄像机、相册功能
    css实现六边形图片(最简单易懂方法实现高逼格图片展示)
    input表单的type属性详解,不同type不同属性之间区别
    js对象,set和get方法 的三种实现形式
    day03 变量
    day01 js三种导入html的方法、js书写规范、变量的基本使用、变量提升
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7942097.html
Copyright © 2020-2023  润新知