• Leetcode#65 Valid Number


    原题地址

    一道考察"工程"能力的好题,但是你丫能说明一下规则不。。

    用状态机求解:

    当遍历完字符串后:

    1. 绿色的状态至少要出现1个

    2. 红色的状态不能作为终结状态

     

    代码:

     1 enum Status {
     2   PRE_PADDING,
     3   SIGN,
     4   NUMBER_BEFORE_POINT,
     5   POINT,
     6   NUMBER_AFTER_POINT,
     7   EXPONENT,
     8   EXPONENT_SIGN,
     9   EXPONENT_NUMBER,
    10   POST_PADDING
    11 };
    12 
    13 bool isNumber(const char *s) {
    14   bool mask[10] = {false};
    15   Status state = PRE_PADDING;
    16 
    17   while (*s) {
    18     switch (state) {
    19     case PRE_PADDING:
    20       if (*s == ' ') mask[state = PRE_PADDING] = true;
    21       else if (*s == '+' || *s == '-') mask[state = SIGN] = true;
    22       else if (*s >= '0' && *s <= '9') mask[state = NUMBER_BEFORE_POINT] = true;
    23       else if (*s == '.') mask[state = POINT] = true;
    24       else return false;
    25       break;
    26     case SIGN:
    27       if (*s >= '0' && *s <= '9') mask[state = NUMBER_BEFORE_POINT] = true;
    28       else if (*s == '.') mask[state = POINT] = true;
    29       else return false;
    30       break;
    31     case NUMBER_BEFORE_POINT:
    32       if (*s >= '0' && *s <= '9') mask[state = NUMBER_BEFORE_POINT] = true;
    33       else if (*s == '.') mask[state = POINT] = true;
    34       else if (*s == 'e') mask[state = EXPONENT] = true;
    35       else if (*s == ' ') mask[state = POST_PADDING] = true;
    36       else return false;
    37       break;
    38     case POINT:
    39       if (*s >= '0' && *s <= '9') mask[state = NUMBER_AFTER_POINT] = true;
    40       else if (*s == 'e') mask[state = EXPONENT] = true;
    41       else if (*s == ' ') mask[state = POST_PADDING] = true;
    42       else return false;
    43       break;
    44     case NUMBER_AFTER_POINT:
    45       if (*s >= '0' && *s <= '9') mask[state = NUMBER_AFTER_POINT] = true;
    46       else if (*s == 'e') mask[state = EXPONENT] = true;
    47       else if (*s == ' ') mask[state = POST_PADDING] = true;
    48       else return false;
    49       break;
    50     case EXPONENT:
    51       if (*s >= '0' && *s <= '9') mask[state = EXPONENT_NUMBER] = true;
    52       else if (*s == '+' || *s == '-') mask[state = EXPONENT_SIGN] = true;
    53       else return false;
    54       break;
    55     case EXPONENT_SIGN:
    56       if (*s >= '0' && *s <= '9') mask[state = EXPONENT_NUMBER] = true;
    57       else return false;
    58       break;
    59     case EXPONENT_NUMBER:
    60       if (*s >= '0' && *s <= '9') mask[state = EXPONENT_NUMBER] = true;
    61       else if (*s == ' ') mask[state = POST_PADDING] = true;
    62       else return false;
    63       break;
    64     case POST_PADDING:
    65       if (*s == ' ') mask[state = POST_PADDING] = true;
    66       else return false;
    67       break;
    68     default:
    69       return false;
    70     }
    71     s++;
    72   }
    73 
    74   return !(state == PRE_PADDING
    75            || state == SIGN
    76            || state == EXPONENT
    77            || state == EXPONENT_SIGN)
    78     && (mask[NUMBER_BEFORE_POINT]
    79         || mask[NUMBER_AFTER_POINT]);
    80 }
  • 相关阅读:
    一道看似简单的sql需求却难倒各路高手
    手把手教你Linux服务器集群部署.net网站
    最简单的 Web Service 入门 (看了包会)
    360wifi 在 windows server 2008 / 2003 的使用方法
    react 入门
    bind、call、apply的区别
    webkit css 扩展
    如何构建一个微型的CMD模块化加载器
    Base64的原理、实现及应用
    You don't know JS 读书笔记(一)
  • 原文地址:https://www.cnblogs.com/boring09/p/4244261.html
Copyright © 2020-2023  润新知