zoukankan      html  css  js  c++  java
  • 65. Valid Number

    ▶ LeetCode 上最费神的题目之一,检查一个字符串是否是一个数字,需要考虑前后空格,数字符,小数点,指数符(e),其他杂质字符等情况。

    ● 代码,8 ms,直白的逐位遍历和分析。

     1 class Solution
     2 {
     3 public:
     4     bool isNumber(string s)
     5     {
     6         int i, n_nm, n_pt;
     7         for (i = 0; s[i] == ' '; i++);//跳过前导空格
     8         
     9         if (s[i] == '+' || s[i] == '-') // 符号位
    10             i++;
    11         for (n_nm = 0, n_pt = 0; (s[i] <= '9' && s[i] >= '0') || s[i] == '.'; i++)
    12             s[i] == '.' ? n_pt++ : n_nm++;
    13         if (n_pt > 1 || n_nm < 1) // 多于一个点或少于一个数字
    14             return false;
    15 
    16         if (s[i] == 'e')// 检查指数部分
    17         {
    18             i++;
    19             if (s[i] == '+' || s[i] == '-')
    20                 i++;
    21             for (n_nm = 0; s[i] >= '0' && s[i] <= '9'; i++, n_nm++);
    22             if (n_nm < 1)
    23                 return false;
    24         }
    25 
    26         for (; s[i] == ' '; i++);// 跳过尾部空白
    27         return s[i] == 0;// 确保尾部是''而没有其他东西
    28     }
    29 };

    ● 代码,10 ms,比较系统的分情况讨论,思想值得精读和学习

     1 class Solution
     2 {
     3 public:
     4     bool isNumber(string s)
     5     {
     6         s.erase(0, s.find_first_not_of(" "));// 取出前后的空白
     7         s.erase(s.find_last_not_of(" ") + 1);
     8         int pos = s.find_first_of("e");// 寻找第一个 'e' 得我位置
     9         if (pos == -1)                 // 没有 'e',当做整数处理
    10             return isValidfloat(s);
    11         else                           // 有 'e',将原数字砍成两半,前半段当浮点数处理,后半段当整数处理
    12             return isValidfloat(s.substr(0, pos)) && isValidInteger(s.substr(pos + 1));
    13     }
    14     bool isValidfloat(string s)
    15     {
    16         int i, n_dot;
    17         if (!s.empty() && (s[0] == '-' || s[0] == '+'))
    18             s.erase(s.begin());        
    19         for (n_dot = i = 0; i < s.size(); i++)
    20         {
    21             if (s[i] == '.')
    22                 n_dot++;
    23             else if (!isdigit(s[i]))
    24                 return false;
    25         }
    26         return n_dot <= 1 && s.size() > n_dot;
    27     }
    28     bool isValidInteger(string s)
    29     {
    30         int i;
    31         if (!s.empty() && (s[0] == '-' || s[0] == '+'))
    32             s.erase(s.begin());
    33         for (i = 0; i<s.size(); i++)
    34         {
    35             if (!isdigit(s[i]))
    36                 return false;
    37         }
    38         return s.size();
    39     }
    40 };
  • 相关阅读:
    View传参数到Controller(asp.net mvc3) 中庸
    ExtJS实战(3)spring
    spring AOP(2)
    ExtJS实战(1)准备工作和界面赏析
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(2)hibernate
    ExtJS实战系列前言
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
  • 原文地址:https://www.cnblogs.com/cuancuancuanhao/p/8323646.html
Copyright © 2011-2022 走看看