zoukankan      html  css  js  c++  java
  • 【Leetcode】【Hard】Valid Number

    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.

    本题需要考虑:

    1、字符前的空格

    2、字符正负号

    3、检查是否是数字,数字中可以包含一个‘.’小数点,数字至少应存在一位

    4、略过数字和点后,检查是否有‘e’,如果有:

      (1)检查指数是否有正负

      (2)检查其后是否有数字,数字至少存在一位

    5、字符后的空格

    6、最后遇到''则返回true,否则false

    代码:

     1 class Solution {
     2 public:
     3     bool isNumber(string s) {
     4         int i = 0;
     5     
     6         // skip the whilespaces
     7         for(; s[i] == ' '; i++) {}
     8     
     9         // check the significand
    10         if(s[i] == '+' || s[i] == '-') i++; // skip the sign if exist
    11     
    12         int n_nm, n_pt;
    13         for(n_nm=0, n_pt=0; (s[i]<='9' && s[i]>='0') || s[i]=='.'; i++)
    14             s[i] == '.' ? n_pt++:n_nm++;       
    15         if(n_pt>1 || n_nm<1) // no more than one point, at least one digit
    16             return false;
    17     
    18         // check the exponent if exist
    19         if(s[i] == 'e') {
    20             i++;
    21             if(s[i] == '+' || s[i] == '-') i++; // skip the sign
    22     
    23             int n_nm = 0;
    24             for(; s[i]>='0' && s[i]<='9'; i++, n_nm++) {}
    25             if(n_nm<1)
    26                 return false;
    27         }
    28     
    29         // skip the trailing whitespaces
    30         for(; s[i] == ' '; i++) {}
    31     
    32         return s[i]==0;  // must reach the ending 0 of the string
    33     }
    34 };
  • 相关阅读:
    数据库(六)
    数据库(五)
    数据库(四)
    数据库(三)
    数据库(二)
    数据库
    函数 枚举和递归
    数据类型(四) 集合
    数据库基础
    特殊集合 结构体
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4774356.html
Copyright © 2011-2022 走看看