`

valid number

阅读更多
LeetCode-Valid Number - 有限状态机
class Solution
{
public:
    bool isNumber(const char *s)
    {
        enum InputType
        {
            INVALID,    // 0
            SPACE,      // 1
            SIGN,       // 2
            DIGIT,      // 3
            DOT,        // 4
            EXPONENT,   // 5
            NUM_INPUTS  // 6
        };
        
        int transitionTable[state][inputType] =
        {
		INVALID,SPACE,SIGN,DIGIT,DOT,EXPONENT
            -1,  0,    3,   1,    2,   -1,     // state0 当输入空格时,状态仍为0,
  											  输入为符号时,状态转为3,3的转换和0是一样的,除了不能再接受符号,故在0的状态的基础上,把接受符号置为-1;
  											  当输入为数字时,状态转为1, 状态1的转换在于无法再接受符号,可以接受空格,数字,点,指数;状态1为合法的结束状态;
  											  当输入为点时,状态转为2,状态2必须再接受数字,接受其他均为非法;
  											  当输入为指数时,非法;
            -1,  8,   -1,   1,    4,    5,     // state1 接受数字时仍转为状态1,
  											  接受点时,转为状态4,可以接受空格,数字,指数,状态4为合法的结束状态,
  											  接受指数时,转为状态5,可以接受符号,数字,不能再接受点,因为指数必须为整数,而且必须再接受数字;
												 【合法的结束状态】
            -1, -1,   -1,   4,   -1,   -1,     // state2 接受数字转为状态4
            -1, -1,   -1,   1,    2,   -1,     // state3 和0一样,只是不能接受符号
            -1,  8,   -1,   4,   -1,    5,     // state4 接受空格,合法接受;
  											  接受数字,仍为状态4;
  											  接受指数,转为状态5
												  【合法的结束状态】
            -1, -1,    6,   7,   -1,   -1,     // state5 接受符号,转为状态6,状态6和状态5一样,只是不能再接受符号,
  											  接受数字,转为状态7,状态7只能接受空格或数字;状态7为合法的结束状态;
            -1, -1,   -1,   7,   -1,   -1,     // state6 只能接受数字,转为状态7
            -1,  8,   -1,   7,   -1,   -1,     // state7 接受空格,转为状态8,状态7为【合法的结束状态】
  											  接受数字,仍为状态7;
            -1,  8,   -1,  -1,   -1,   -1,     // state8 接受空格,转为状态8,状态8为【合法的结束状态】
        };
        
        int state = 0;
        while (*s != '\0')
        {
            InputType inputType = INVALID;
            if (isspace(*s))
                inputType = SPACE;
            else if (*s == '+' || *s == '-')
                inputType = SIGN;
            else if (isdigit(*s))
                inputType = DIGIT;
            else if (*s == '.')
                inputType = DOT;
            else if (*s == 'e' || *s == 'E')
                inputType = EXPONENT;
            
            state = transitionTable[state][inputType];
            
            if (state == -1)
                return false;
            else
                ++s;
        }        
        return state == 1 || state == 4 || state == 7 || state == 8;
    }
};
分享到:
评论

相关推荐

    dns服务器基本配置

    ### DNS服务器基本配置知识点 #### 一、DNS服务器概述 DNS(Domain Name System,域名系统)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。...

    leetcode最难-LeetCode_ValidNumber:因为我疯了,所以我去了LeetCode,并按Hardest:LeastSolv

    leetcode最难LeetCode_ValidNumber 因为我疯了,所以我去了 LeetCode,并按 Hardest:LeastSolved 排序。 没有汗! 语言:C# 我学到的是 这个很疯狂,因为它在定义实际可以算作数字方面确实做得很差。 如果这是面对面...

    Number to Bin Converter Using Javascript.zip

    throw new Error('Input must be a valid number.'); } return num.toString(2); } console.log(numToBin(10)); // 输出 "1010" ``` 这个`numToBin`函数首先检查输入是否为有效数字,然后调用`toString(2)`进行...

    Python库 | phonenumbers-8.12.20-py2.py3-none-any.whl

    from phonenumbers import parse, format_number, is_valid_number # 解析电话号码 number = parse("+16502530000", "US") # 验证电话号码 if is_valid_number(number): print("Valid number!") else: print(...

    xtree java 异步 树 demo

    ISVALID NUMBER(1), SYSTEMNAME VARCHAR2(50) ); -- Create/Recreate primary, unique and foreign key constraints alter table APPMENU add constraint PK_APPMENU primary key (APPMENUID);

    jQuery验证控件jquery.validate.js使用说明+中文API

    7. `number`: "Please enter a valid number." 8. `digits`: "Please enter only digits" 9. `creditcard`: "Please enter a valid credit card number." 10. `equalTo`: "Please enter the same value again." 11. ...

    android 电话号码正则表达式(联通移动电信)

    System.out.println("Valid Number: " + isValidPhoneNumber(validNumber)); // 应该返回true System.out.println("Invalid Number: " + isValidPhoneNumber(invalidNumber)); // 应该返回false } } ``` 通过...

    Groovy入门]第二讲.完成文本界面的程序框架

    println "Please enter a valid number." } ``` 此外,Groovy还提供了许多库,如GPars(Groovy Parallel Systems),用于并发和多线程编程,这在处理复杂的文本界面程序时可能会派上用场。 在"完成文本界面的程序...

    jquery 校验的文档

    - `number: "Please enter a valid number."` —— 数字格式错误提示。 - `digits: "Please enter only digits"` —— 只能输入数字提示。 - `creditcard: "Please enter a valid credit card number."` —— 信用卡...

    C# 中关于汉字与16进制转换的代码

    //throw new ArgumentException("hex is not a valid number!", "hex"); } byte[] bytes = new byte[hex.Length / 2]; for (int i = 0; i ; i++) { try { bytes[i] = byte.Parse(hex.Substring(i * 2, 2),...

    LeetCode最全代码

    The number of questions is increasing recently. Here is the classification of all `468` questions. For more questions and solutions, you can see my [LintCode](https://github.com/kamyu104/LintCode) ...

    常见算法题答案及解析

    9. Valid Number:判断一个字符串是否可以表示为有效数字,涉及到数字表示和边界条件的处理。 10. Longest Substring Without Repeating Characters:找出不含重复字符的最长子串,通常使用滑动窗口技术。 11. ...

    C primer plus编程题目代码

    Please enter a valid number.\n"); } else return num; } } ``` - **知识点:** - 使用`switch`语句根据不同的输入值执行相应的操作。 - 处理用户输入错误的情况,例如非数字输入。 - 计算工资时利用...

    Leetcode book刷题必备

    9. Valid Number:判断一个字符串是否是有效的数字表示。 10. Longest Substring Without Repeating Characters:找出不含有重复字符的最长子串的长度。 11. Longest Substring with At Most Two Distinct ...

    Chapter 3 - 循环控制 for 和while,条件控制 if1

    else: print "Please enter a valid number for dateOfWeek."` 循环控制 for 和 while 循环控制用于让电脑循环计算,直到完成某个条件。Python 主要有两种循环控制方法:for 和 while。 for 循环主要用于遍历一...

    javadoc eclipse

    * @throws IllegalArgumentException If either num1 or num2 is not a valid number. */ public int addNumbers(int num1, int num2) throws IllegalArgumentException { // implementation } ``` 2. **生成...

    jquery.validate

    number: "Please enter a valid number." } }); ``` ##### 8. 整数验证:`digits` 确保输入的值仅包含数字。 ```javascript $("#form").validate({ rules: { digits: { digits: true } }, messages: { ...

    Python 核心

    print("That's not a valid number!") ``` 此外,Python的模块化设计使得代码组织有序,可重用性强。通过`import`语句,可以引入其他模块的功能。例如,`math`模块提供了各种数学函数: ```python import math ...

Global site tag (gtag.js) - Google Analytics