zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7942097.html
Copyright © 2011-2022 走看看