题意:判断一个字符串是否是一个合法的数字,包括正负浮点数和整形。

思路:有限自动机可以做,画个图再写程序就可以解决啦,只是实现起来代码的长短而已。

  下面取巧来解决,分情况讨论:

(1)整数

(2)浮点数

(3)整数e整数

(4)浮点数e整数

  只有以上4种情况。但是要数之前可能带1个符号,这个可以直接过滤1个,而不影响结果。而且,其包含关系是从上到下扩展的,(1)扩展到(2),(3)扩展到 (4)。

  

  那么先解决符号 e 之前的,必须满足:正负号至多1个,有数字1个以上,点至多1个。

  如果没有e,那么可以结束了。若有e,跳过1个e,再继续。

  解决e后面的,必须满足:正负号至多1个,有数字1个以上,没有点。

 class Solution {
public:
bool isNumber(string s) {
int i=, d=;
while( !s.empty() && s[s.size()-]==' ' ) //直接删后缀空格
s.erase(s.end()-); while(i<s.size() && s[i]==' ') //忽略前缀空格
i++;
if( s[i]=='+' || s[i]=='-' ) i++; //这个符号出现了等于没出现 while(i<s.size() && isdigit(s[i]))
i++,d++;
if(i<s.size()&&s[i]=='.') i++;
while(i<s.size() && isdigit(s[i]))
i++,d++;
if(!d) return false; //保证e之前不为空,且合法 //以上是e前的情况
if(i==s.size()) return true;
else if(s[i]!='e') return false; //有e出现则e后不能空。无e则出错 //下面e后的情况
if(s[++i]=='+'||s[i]=='-') i++; //可以有符号 d=;
while(i<s.size()&& isdigit(s[i])) //只能出现整数了
i++,d++;
if(d && i==s.size()) return true;
else return false;
}
};

AC代码

LeetCode Valid Number 有效数字(有限自动机)的更多相关文章

  1. leetCode 65.Valid Number (有效数字)

    Valid Number  Validate if a given string is numeric. Some examples: "0" => true " ...

  2. LeetCode: Valid Number 解题报告

    Valid NumberValidate if a given string is numeric. Some examples:"0" => true" 0.1 ...

  3. [LeetCode] Valid Number 验证数字

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  4. [leetcode]Valid Number @ Python

    原题地址:http://oj.leetcode.com/problems/valid-number/ 题意:判断输入的字符串是否是合法的数. 解题思路:这题只能用确定有穷状态自动机(DFA)来写会比较 ...

  5. LeetCode——Valid Number

    Validate if a given string is numeric. Some examples: "0" => true " 0.1 " =&g ...

  6. Leetcode Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  7. leetcode - valid number 正则表达式解法

    import java.util.regex.Pattern; public class Solution { Pattern p = Pattern.compile("^[\\+\\-]? ...

  8. [LeetCode] Valid Number 确认是否为数值

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

  9. [Swift]LeetCode65. 有效数字 | Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

随机推荐

  1. LCS最长公共子序列(最优线性时间O(n))

    这篇日志主要为了记录这几天的学习成果. 最长公共子序列根据要不要求子序列连续分两种情况. 只考虑两个串的情况,假设两个串长度均为n. 一,子序列不要求连续. (1)动态规划(O(n*n)) (转自:h ...

  2. C#中的Delegate

    谈C#中的Delegate http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html

  3. 创建CancellationTokenSource对象用于取消Task

    虽然使用线程池ThreadPool让我们使用多线程变得容易,但是因为是由系统来分配的,如果想对线程做精细的控制就不太容易了,比如某个线程结束后执行一个回调方法.恰好Task可以实现这样的需求.这篇文章 ...

  4. Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯

    minifilter是sfilter后微软推出的过滤驱动框架.相比于sfilter,他更容易使用,需要程序员做的编码更简洁. 系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一 ...

  5. MakeObjectInstance的简单理解

    昨天把MakeObjectInstance的代码详细研究了一下,当然还有众多前辈高手们的帮助,终于大致搞明白了是怎么回事.但是给我顿悟的,不是高手们的帖子,而是来自我自己的一个疑惑,TObjectIn ...

  6. WordPress主题制作教程9:文章形式

    wordpress的文章形式: aside -----------------日志:不显示标题的标准文章image --------------图像:单张图像.文章中的首个 <img /> ...

  7. Android:开发环境

    一.JAVA SDK(JDK)的安装 http://www.cnblogs.com/tinyphp/p/3664598.html 二.ADT-Bundle 包含了Eclipse.ADT插件和SDK T ...

  8. Linux命令-free

    显示系统内存使用情况 free  [-m / -g / -h] [root@localhost test]# free -m total used free shared buff/cache ava ...

  9. hive0.13网络接口安装

    安装好hive 0.13以后,在./lib下找不到hive-hwi-0.13.1.war   ,那该怎么办? 1.下载hive-0.12.0版本,把这一版里面的hive-hwi-0.12.0.war重 ...

  10. 浅谈Linux下的五种I/O模型

     一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所 ...