• [leetcode]65. Valid Number 有效数值


    Validate if a given string can be interpreted as a decimal number.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true
    " -90e3   " => true
    " 1e" => false
    "e3" => false
    " 6e-1" => true
    " 99e2.5 " => false
    "53.5e93" => true
    " --6 " => false
    "-+3" => false
    "95a54e53" => false

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

    • Numbers 0-9
    • Exponent - "e"
    • Positive/negative sign - "+"/"-"
    • Decimal point - "."

    Of course, the context of these characters also matters in the input.

    思路

    There is no complex algorithem, just checking each char from input String

    代码

     1 // {前缀空格}{浮点数}{e}{正数}{后缀空格}
     2 class Solution {
     3     public boolean isNumber(String s) {
     4         int len = s.length();
     5         int i = 0;
     6         int right = len - 1;
     7         
     8         // delete white spaces on both sides
     9         while (i <= right && Character.isWhitespace(s.charAt(i))) i++;
    10         if (i > len - 1) return false;
    11         while (i <= right && Character.isWhitespace(s.charAt(right))) right--;
    12         
    13         // check +/- sign
    14         if (s.charAt(i) == '+' || s.charAt(i) == '-') i++;
    15         
    16         boolean num = false; // is a digit
    17         boolean dot = false; // is a '.'
    18         boolean exp = false; // is a 'e'
    19         
    20         while (i <= right) {
    21             char c = s.charAt(i);
    22             // first char should be digit
    23             if (Character.isDigit(c)) {
    24                 num = true;
    25             }
    26             else if (c == '.') {
    27                 // exp and dot cannot before '.'
    28                 if(exp || dot) return false;
    29                 dot = true;
    30             }
    31             else if (c == 'e') {
    32                 // only one 'e'can exist 
    33                 // 'e' should after num
    34                 if(exp || num == false) return false;
    35                 exp = true;
    36                 // after 'e' should exist num, so set num as default false
    37                 num = false;
    38             }
    39             else if (c == '+' || c == '-') {
    40                 if (s.charAt(i - 1) != 'e') return false;
    41             }
    42             else {
    43                 return false;
    44             }
    45             i++;
    46         }
    47         return num;
    48     }
    49 }

    变种之简化版本的Valid Number : checking +/- numbers including decimal numbers

    需要跟面试官confirm

    以下哪些算valid,若以下test case中,蓝色字体是valid的

    123
    -123
    123.123
    -123.123
    .123
    -.123
    123.
    123-.

    那么:

    1.  Decimal point 前面必须是数字

    2. Decimal point 后面必须是数字

    3. 整个valid number最后是以数字结尾

     1 public boolean isNumber(String s) {
     2         int len = s.length();
     3         int i = 0;
     4         int right = len - 1;
     5 
     6         // delete white spaces on both sides
     7         while (i <= right && Character.isWhitespace(s.charAt(i))) i++;
     8         if (i > len - 1) return false;
     9         while (i <= right && Character.isWhitespace(s.charAt(right))) right--;
    10 
    11         // check +/- sign
    12         if (s.charAt(i) == '+' || s.charAt(i) == '-') i++;
    13 
    14         boolean num = false; // is a digit
    15         boolean dot = false; // is a '.'
    16         
    17         while (i <= right) {
    18             char c = s.charAt(i);
    19             if (Character.isDigit(c)) {
    20                 num = true;
    21             }
    22             else if (c == '.') {
    23                 // (1) .. two dots  (2) no number before dot (3) - before dot
    24                 if( dot || num == false || s.charAt(i-1) == '-') return false;
    25                 dot = true;
    26                 // check whether there is number after decimal point
    27                 num = false;
    28             }
    29             else {
    30                 return false;
    31             }
    32             i++;
    33         }
    34         return num;
    35     }
  • 相关阅读:
    吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons)
    Logical partitioning and virtualization in a heterogeneous architecture
    十条实用的jQuery代码片段
    十条实用的jQuery代码片段
    十条实用的jQuery代码片段
    C#比较dynamic和Dictionary性能
    C#比较dynamic和Dictionary性能
    C#比较dynamic和Dictionary性能
    分别使用 XHR、jQuery 和 Fetch 实现 AJAX
    分别使用 XHR、jQuery 和 Fetch 实现 AJAX
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9810576.html
Copyright © 2020-2023  润新知