leetcode-Valid Number

Valid Number

题目:

  • Validate if a given string is numeric.
  • Some examples:
    –“0” => true
    –” 0.1 ” => true
    –“abc” => false
    –“1 a” => false
    –“2e10” => true

思路:

  1. 有限状态机:清晰明了,网上资料较多,比较难以想到
  2. if-else,比较难理清楚多种情况,思路较为直接
    1) 去掉字符串前后空格
    2) 再进行判断

情况分类:

合法输入:

输入限制条件
.前面可有可无(有符号或无符号)数字;前面无数字的时候,后面必须跟无符号数字;前面无数字的时候,不是合法的结束;只能出现一次
e前后必须有(有符号或无符号)数字,后面的数字必须为整数;不是合法的结束;只能出现一次
数字无,是合法结束
+、-只能出现在最开始,或者e后面;不是合法的结束

代码:

class Solution {
public:
    void trim(string &s) // 去掉前后空格
    {
       if (s.empty()) 
       {
         return;
       }
       s.erase(0,s.find_first_not_of(" "));
       s.erase(s.find_last_not_of(" ") + 1);
    }

    bool isNumber(string s) {       
        trim(s);
        if (s.empty()) return false;

        int i = 0;
        // 判断点和e是否是第一次出现,以及判断是否出现过数字
        bool isFirstP = 1, isFirste = 1, hasNum = 0;

        while (i < s.length())
        {
            if ( (s[i] == '+' || s[i] == '-') && (i == 0 || (s[i-1] == 'e' && i != s.length() - 1)) )
            {
                i++;
                continue;
            }
            if ( (s[i] >= '0' && s[i] <= '9') || (s[i] == '.' && isFirstP && isFirste && (i != s.length() - 1 || hasNum)) ) 
            {
                if (s[i] == '.') isFirstP = 0;
                else
                    hasNum = 1;
                i++;
                continue;
            }
            else if (s[i] == 'e' && isFirste && hasNum && i != s.length() - 1)
            {
                isFirste = 0;
                i++;
                continue;
            }
            return false;
        }
        return true;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值