65 - Valid Number(DFA-Deterministic Finite Automaton)

Leetcode 65 Valid Number DFA有限状态机 用有限状态机DFA解决,将每一位看成一种状态转移条件,每次读取的一位,就根据转移矩阵进行状态转移,若转移到不合法的状态则返回false。 阅读详情

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

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.

思路分析:

1、参考文章:


http://blog.youkuaiyun.com/kenden23/article/details/18696083
http://www.cnblogs.com/zuoyuan/p/3703075.html
http://blog.youkuaiyun.com/yeruby/article/details/46851107


这题只能用确定有穷状态自动机(DFA)来写会比较优雅。

注释一下本题分多少状态吧:

0初始无输入或者只有space的状态
1输入了数字之后的状态
2前面无数字,只输入了Dot的状态
3输入了符号状态
4前面有数字和有dot的状态
5'e' or 'E'输入后的状态
6输入e之后输入Sign的状态
7输入e后输入数字的状态
8前面有有效数输入之后,输入space的状态

共9种状态了,难设计的是6,7,8状态。

分好之后就好办了,设计出根据输入进行状态转换就OK了。


这里的输入可以分:

INVALID,  // 0 Include: Alphas, '(', '&' ans so on
SPACE,  // 1
SIGN, // 2 '+','-'
DIGIT,  // 3 numbers
DOT, // 4 '.'
EXPONENT,  // 5 'e' 'E'


#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class Solution_065_ValidNumber
{
public:
	bool isNumber(string s)
	{
		enum InputType
		{
			INVALID,
			SPACE,
			SIGN,
			DIGIT,
			DOT,
			EXPONENT,
		};

		int transTable[][6] = {
			-1, 0, 3, 1, 2, -1,//0初始无输入或者只有space的状态  
			-1, 8, -1, 1, 4, 5,//1输入了数字之后的状态  
			-1, -1, -1, 4, -1, -1,//2前面无数字,只输入了Dot的状态  
			-1, -1, -1, 1, 2, -1,//3输入了符号状态  
			-1, 8, -1, 4, -1, 5,//4前面有数字和有dot的状态  
			-1, -1, 6, 7, -1, -1,//5'e' or 'E'输入后的状态  
			-1, -1, -1, 7, -1, -1,//6输入e之后输入Sign的状态  
			-1, 8, -1, 7, -1, -1,//7输入e后输入数字的状态  
			-1, 8, -1, -1, -1, -1,//8前面有有效数输入之后,输入space的状态  
		};

		int state = 0;
		int i = 0;
		
		while (s[i])
		{
			InputType input = INVALID;

			if (s[i] == ' ')
			{
				input = SPACE;
			}
			else if (s[i] == '+' || s[i] == '-')
			{
				input = SIGN;
			}
			else if (isdigit(s[i]))
			{
				input = DIGIT;
			}
			else if (s[i] == '.')
			{
				input = DOT;
			}
			else if (s[i] == 'e' || s[i] == 'E')
			{
				input = EXPONENT;
			}
			
			state = transTable[state][input];

			if (state == -1)
			{
				return false;
			}

			i++;
		}

		return state == 1 || state == 4 || state == 7 || state == 8;
	}
};


Valid Number(使用DFA,有图) LeetCode题目 Validate if a given string is numeric.Some examples: “0” => true ” 0.1 ” => true “abc” => false “1 a” => false “2e10” => true Note: It is intended for the problem statement to be ambi 阅读详情

相关推荐

山景BP10_128DBG开发板通过蓝牙连接手机放歌实验回顾

最近在学习上海山景公司的BP10_128DBG的开发板,因为网上关于BP10开发板的帖子也比较少,在学习的时候也没有太多的参考资料,基本上都是官方的历程。蓝牙放歌这个demo对我来说也比较复杂,特写下此博客进行记录、总结,大家有需要的可以参考。

weixin_56646002的博客 2022

Java敏感词过滤实战:5分钟搞定DFA算法+MySQL动态词库

本文详细介绍了Java中利用DFA算法实现高效敏感词过滤的实战方案,结合MySQL动态词库实现实时更新与高性能处理。通过优化DFA算法结构、设计合理的数据库同步策略及并发控制机制,该方案可轻松应对企业级应用的高并发需求,并提供模糊匹配、多级处理等扩展功能。

weixin_29302047的博客 398

DESeq2实战:利用LRT检验解析时间序列基因表达动态变化

本文详细介绍了如何使用DESeq2中的LRT检验分析时间序列基因表达数据,揭示基因表达动态变化模式。通过构建完整模型与简化模型比较,LRT检验能有效识别处理效应随时间变化的基因,适用于发育过程、疾病进展等研究。文章提供了从数据准备、模型构建到结果可视化的完整实战指南,并分享了高级技巧与常见问题排查方法。

weixin_29062671的博客 453

确定有限状态自动机(deterministic finite automaton)DFA

google找了一点资料,做个记录。   维基百科定义:在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表{\displaystyle \Sigma }Σ的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状...

xiaqi4145 4402

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1050

保姆级教程:用Fiddler+夜神模拟器搞定抖音App抓包(附SSL Pinning绕过实战)

本文提供了一套完整的移动端抓包解决方案,详细介绍了如何使用Fiddler和夜神模拟器进行抖音App抓包,并重点讲解了SSL Pinning绕过技术。通过Xposed框架和JustTrustMe模块的组合,实现高效抓包,适用于产品分析、竞品研究和安全测试等场景。

weixin_30855099的博客 424

编译原理 —— 正则->NFA->DFA->MFA (Web)

源码在: https://github.com/imcuttle/regExp_nfa_dfa_mfa 知识介绍 NFA:不确定有限自动机, 边上可能存在空串,可以有多个初始状态。 DFA:确定有限自动机, 边上不存在空串,只有一个初始状态。 MFA:状态最少 NFA-&gt;DFA : NFA的确定化; DFA-&gt;MFA :DFA的最小化。 正则表达式-&gt;NFA ...

墨鱼的博客 3703

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 380

65. Valid Number

Validate if a given string is numeric. Some examples: "0" => true " 0.1 " => true "abc" => false "1 a" => false "2e10" => true Note: It is intended for the problem statement to be ambiguous.

大胖子狗的博客 382

萤石云cs刷机解绑固件

萤石CS-C2C-32WFR刷机包,萤石CS-C6TC刷机包,萤石CS-C6H刷机包,萤石猫眼产品等等。萤石云摄像头固件修改,绑定手机号解绑,更换序列号教程。

海康威视技术支持 2万+

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1633

Valid Number 判断一个string是不是有效地数字表达式 @LeetCode

这道题看了看网上的解法,很多都做得很麻烦。其实我觉得,这道题就是考察正则表达式。 package Level2; /** * Valid Number * * Validate if a given string is numeric. Some examples: "0" => true " 0.1 " => true "abc" => false "1 a" =>

1万+

第9.3章 从CMake基础到自动驾驶实战:构建跨平台C/C++项目的全能指南

《CMake构建实战:项目开发卷》精要指南 本文系统梳理了许宏旭《CMake构建实战》核心内容,涵盖C++构建全流程: 基础构建:详解MSVC/GCC编译器使用、Makefile编写及静态/动态库构建方法 CMake核心:解析语法结构、变量控制、文件操作等关键命令,阐述项目全生命周期管理 实战应用:通过快速排序、手写数字识别项目演示现代CMake实践,特别针对自动驾驶领域给出多传感器融合、SLAM等场景的CMake配置方案 特色价值:本书填补了官方文档实例不足的空白,提供300+代码示例,是掌握工业级C++

行知SLAM 1344

编译原理--XLEX生成器--词法分析

实验二:XLEX生成器 项目地址(包括代码和文档) GitHub:https://github.com/chenminghai/CS-Homework(如果可以,点个start,有问题可以issue) 一、实验内容: 设计一个应用软件,以实现将正则表达式--&gt;NFA---&gt;DFA--&gt;DFA最小化--&gt;词法分析程序 二、实验要求: (1). 要提供一个源程序编辑界面,...

qq_39573547的博客 4633

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode algorithms 第 65 题:Valid Number。

题目 Validate if a given string is numeric. Some examples: “0″ => true ” 0.1 ” => true “abc” => false “1 a” => false “2e10″ => true Note: It is intended for the problem statement to be amb

u012601587的专栏 1247

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[LeetCode] Valid Number

Validate if a given string is numeric. Some examples: "0" => true " 0.1 " => true "abc" => false "1 a" => false "2e10" => true Note: It is intended for the problem statement to be ambiguo

┅☆心随风飞 1758

LeetCode Valid Number(判断字符串是否是合法的数字表示 )

代码如下: public class Solution { public boolean isNumber(String s) { s = s.trim(); int len = s.length(); if (0 == len) return false; boolean hasE = false, hasDot = f

多看多听多总结 1940

编译原理中正则表达式直接构造DFA,DFA的最小化算法

之前提到了经过通过NFA来构造DFA(http://blog.youkuaiyun.com/betabin/article/details/8057787),现在继续来忽悠下,直接从正则表达式构造DFA。嗯,还有个附加的DFA极小化。 直接构造DFA,大致分为3步:构造语法分析树、计算followpos函数(难点)、生成DFA。 以正则表达式(a|b)*abb为例: 1、构造语法分析树: 这个

BetaBin 2万+

DFA(deterministic finite automaton )有限状态机概念

DFA(deterministic finite automaton )有限状态机,是一个常见的计算机概念,在离散数学和《计算机系统概论》中都有阐述,最近刚好离散数学在学这个,整理一下,供大家参考。DFA是一个含5个元素的元祖(S, q0, T, F, Σ)S:状态的集合q0:初始化状态T:过渡方式?(transition function,此处翻译的不大准确)F:结束状态的集合Σ:全部的字母表以...

qq_30117591的博客 7851

编译原理-词法分析 之 正则表达式、NFA与DFA

1.正则表达式:正则表达式是一种更紧凑的正则文法,正则表达式、正则文法、NFA、DFA他们存在一一对应关系 2.什么是DFA:DFA有如下几个部分构成,初始状态、终态、输入字母表(可以理解成合法的输入)、状态集、以及状态转换表(状态集与合法输入笛卡尔积而成,每一个状态接收到一个合法的输入后都会得到一个唯一确定的状态)。 什么是NFA:基本与DFA相同,不同点是,NFA的状态转换规则,一个状态接收...

qq_41810184的博客 2065

LeetCode65——Valid Number(使用DFA)来判断字符串是否为数字

题目: 参考解法:(DFA) class Solution { public: bool isNumber(string str) { int state=0, flag=0; // flag to judge the special case "." while(str[0]==' ') str.erase(0,1);

主要记录嵌入式学习与开发过程。 950

46 - Permutations(全排列和递归)

Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. Subscrib

hellochenlu的博客 1411

97 - Interleaving String

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 = "aabcc", s2 = "dbbca", When s3 = "aadbbcbcac", return true. When s3 = "aadbbbaccc", ret

hellochenlu的博客 1359
上一篇: 206 - Reverse Linked List
下一篇: 94 - Binary Tree Inorder Traversal
hellochenlu
博客等级 码龄14年 97粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值