• 65. Valid Number


    Validate if a given string can be interpreted as a decimal number.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true
    " -90e3   " => true
    " 1e" => false
    "e3" => false
    " 6e-1" => true
    " 99e2.5 " => false
    "53.5e93" => true
    " --6 " => false
    "-+3" => false
    "95a54e53" => false

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

    • Numbers 0-9
    • Exponent - "e"
    • Positive/negative sign - "+"/"-"
    • Decimal point - "."

    Of course, the context of these characters also matters in the input.

    Update (2015-02-10):
    The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.

    class Solution {
        public boolean isNumber(String s) {
        int state = 0; 
        s = s.trim();//去除头尾的空格
        //遍历所有字符,当做输入
        for (int i = 0; i < s.length(); i++) {
            switch (s.charAt(i)) {
                 //输入正负号
                case '+':
                case '-':
                    if (state == 0) {
                        state = 1;
                    } else if (state == 4) {
                        state = 6;
                    } else {
                        return false;
                    }
                    break;
                //输入数字
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    //根据当前状态去跳转
                    switch (state) {//这块是state,是integer,不是char
                        case 0:
                        case 1:
                        case 2:
                            state = 2;
                            break;
                        case 3:
                            state = 3;
                            break;
                        case 4:
                        case 5:
                        case 6:
                            state = 5;
                            break;
                        case 7:
                            state = 8;
                            break;
                        case 8:
                            state = 8;
                            break;
                        default:
                            return false;
                    }
                    break;
                //小数点
                case '.':
                    switch (state) {
                        case 0:
                        case 1:
                            state = 7;
                            break;
                        case 2:
                            state = 3;
                            break;
                        default:
                            return false;
                    }
                    break;
                //e
                case 'e':
                    switch (state) {
                        case 2:
                        case 3:
                        case 8:
                            state = 4;
                            break;
                        default:
                            return false;
                    }
                    break;
                default:
                    return false;
    
            }
        }
        //橙色部分的状态代表合法数字
        return state == 2 || state == 3 || state == 5 || state == 8;
    }
    }
  • 相关阅读:
    CentOS6.3 编译安装LAMP(4):编译安装 PHP5.2.17
    CentOS6.3 编译安装LAMP(3):编译安装 MySQL5.5.25
    解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题
    Apache静态编译与动态编译详解
    Apache常用2种工作模式prefork和worker比较
    Apache 优化配置10条建议
    Apache prefork 模块指令分析
    PHP上传(单个)文件示例
    CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25
    CentOS6.3 编译安装LAMP(1):准备工作
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11403201.html
Copyright © 2020-2023  润新知