LeetCode Valid Number 有效数字(有限自动机)
题意:判断一个字符串是否是一个合法的数字,包括正负浮点数和整形。
思路:有限自动机可以做,画个图再写程序就可以解决啦,只是实现起来代码的长短而已。
下面取巧来解决,分情况讨论:
(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 有效数字(有限自动机)的更多相关文章
- leetCode 65.Valid Number (有效数字)
Valid Number Validate if a given string is numeric. Some examples: "0" => true " ...
- LeetCode: Valid Number 解题报告
Valid NumberValidate if a given string is numeric. Some examples:"0" => true" 0.1 ...
- [LeetCode] Valid Number 验证数字
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
- [leetcode]Valid Number @ Python
原题地址:http://oj.leetcode.com/problems/valid-number/ 题意:判断输入的字符串是否是合法的数. 解题思路:这题只能用确定有穷状态自动机(DFA)来写会比较 ...
- LeetCode——Valid Number
Validate if a given string is numeric. Some examples: "0" => true " 0.1 " =&g ...
- Leetcode Valid Number
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
- leetcode - valid number 正则表达式解法
import java.util.regex.Pattern; public class Solution { Pattern p = Pattern.compile("^[\\+\\-]? ...
- [LeetCode] Valid Number 确认是否为数值
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
- [Swift]LeetCode65. 有效数字 | Valid Number
Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...
随机推荐
- poj 3684
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 784 Accepted: 266 ...
- Install WindowBuilder for Eclipse
WindowBuilder官方下载安装说明地址:http://www.eclipse.org/windowbuilder/download.php 先祝各位能顺利安装上!以下是基于Eclipse in ...
- MongoDB 安装,启动与基本使用
一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...
- Spark 1.6.1分布式集群环境搭建
一.软件准备 scala-2.11.8.tgz spark-1.6.1-bin-hadoop2.6.tgz 二.Scala 安装 1.master 机器 (1)下载 scala-2.11.8.tgz, ...
- 20_采用ContentProvider对外共享数据
<AndroidManifest.xml> <application <provider android:name=".PersonProvider&q ...
- ajax练习习题二三级联动
异步执行 1数据传输收发数据的时候不用等待对方接受,可以继续发送 2Ajax 在调用处理页面处理数据的时候,下面的代码可以继续执行,效率高 同步执行 1收发数据的时候要等到对方接受的成功,才可以继续发 ...
- JQUERY与JS的区别
JQUERY与JS的区别 <style type="text/css"> #aa { width:200px; height:200px; } </style&g ...
- c++异常 连续抛出异常
今天天遇到这样一个问题,连续两次抛出异常,但是只有一个catch,会导致core这个时候会导致core, 单线程编程中可能很少遇到这样的问题,但是多线程中是很容易遇到的, 举个例子:catch代码 ...
- 浅谈ES5的const以及strict mode
了解你使用的JavaScript版本是很重要的,因为不同版本的JavaScript对某些语法或者特性的支持情况是不一样的,下面就来举一些例子来说明一下.首先来看一下const关键字,学过比如Java, ...
- Volley HTTP库系列教程(4)Volley内置的几种请求介绍及示例,StringRequest,ImageRequest,JsonObjectRequest
Making a Standard Request Previous Next This lesson teaches you to Request a String 返回String Requ ...