zoukankan      html  css  js  c++  java
  • LeetCode

    Valid Number

    2014.2.27 01:36

    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.

    Solution:

      This is indeed a boring problem. You'll have to be careful with all the possibilities you have in mind.

      Here are a few things to take care of:

        1. "3." is valid

        2. ".49" is valid

        3. "2E12" and "-2e-2" are valid, but "E3" is not

        4. "000123" is valid

        5. "999999999999999999999999999999999" is valid, despite it being well beyond INT_MAX

      There're surely other rules to check, but the few cases mentioned above are, in my opinion, more likely to be overlooked.

      Total time complexity is O(len(s)). Space complexity is O(1).

    Accepted code:

     1 // 1CE, 3WA, 1AC, good, but not good enough.
     2 #include <cstring>
     3 using namespace std;
     4 
     5 class Solution {
     6 public:
     7     bool isNumber(const char *s) {
     8         int i, len;
     9         
    10         if (s == nullptr) {
    11             return false;
    12         }
    13         
    14         len = strlen(s);
    15         // skip the trailing spaces
    16         while (len - 1 >= 0 && s[len - 1] == ' ') {
    17             --len;
    18         }
    19         i = 0;
    20         
    21         // skip the leading spaces
    22         while (i < len && s[i] == ' ') {
    23             ++i;
    24         }
    25         if (i == len) {
    26             return false;
    27         }
    28         
    29         // an optional sign
    30         if (s[i] == '-' || s[i] == '+') {
    31             ++i;
    32         }
    33         if (i == len) {
    34             return false;
    35         }
    36         
    37         // the part before 'e' or 'E'
    38         int dot_count = 0;
    39         int digit_count = 0;
    40         while (i < len && s[i] != 'e' && s[i] != 'E') {
    41             if (s[i] >= '0' && s[i] <= '9') {
    42                 ++digit_count;
    43             } else if (s[i] == '.') {
    44                 if (dot_count > 0) {
    45                     return false;
    46                 } else {
    47                     ++dot_count;
    48                 }
    49             } else {
    50                 return false;
    51             }
    52             ++i;
    53         }
    54         if (i == len) {
    55             // no 'e' or 'E'
    56             if (digit_count > 0) {
    57                 return true;
    58             } else {
    59                 return false;
    60             }
    61         } else if (digit_count == 0) {
    62             return false;
    63         }
    64         
    65         ++i;
    66         if (i == len) {
    67             // no exponent after 'e' or 'E'
    68             // 1.2E
    69             return false;
    70         }
    71         
    72         if (s[i] == '-' || s[i] == '+') {
    73             ++i;
    74         }
    75         if (i == len) {
    76             // no digit after 'e' or 'E'
    77             // 1.2E+
    78             // 1.3e-
    79             return false;
    80         }
    81         while (i < len) {
    82             if (s[i] >= '0' && s[i] <= '9') {
    83                 ++i;
    84             } else {
    85                 return false;
    86             }
    87         }
    88         
    89         return true;
    90     }
    91 };
  • 相关阅读:
    30 Day Challenge Day 12 | Leetcode 198. House Robber
    30 Day Challenge Day 12 | Leetcode 276. Paint Fence
    30 Day Challenge Day 12 | Leetcode 265. Paint House II
    30 Day Challenge Day 12 | Leetcode 256. Paint House
    30 Day Challenge Day 11 | Leetcode 76. Minimum Window Substring
    30 Day Challenge Day 11 | Leetcode 66. Plus One
    oracle之6过滤与排序
    oracle之5多行函数之过滤分组函数
    oracle之4多行函数之分组函数
    oracle之3单行函数之条件表达式
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3570559.html
Copyright © 2011-2022 走看看