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 1411
#include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using nam ...
- 饶有兴致的用javascript做了个贪食蛇游戏
09年写的东西.一直藏在自己的记事本里头,现在开始整理写博客,所以直接搬过来 先上效果图 再添代码: <HTML> <HEAD> <TITLE>贪吃蛇 Snake ...
- HTML基本操作
插入图片: 1.利用链接(静态) <img src="http://www.kmwzjs.com/useruploads/images/20101020_057600100825157 ...
- iOS开发--动画(Animation)总结
UIView的,翻转.旋转,偏移,翻页,缩放,取反的动画效果 翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:ni ...
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ...
- mac 下tomcat启动报错 unknown host
解决方法:sudo scutil --set HostName localhost
- 基于webpivottable做的透视表
1.绑定数据和配置: var wptConfig=<%= wptConfig%>; webPivotTable.setCsvData(<%=dataFields %>, < ...
- 字符串 —— String?StringBuffer?StringBuilder?
字符串常用的操作就是拼接,特别是SQL语句的拼接. 做了个简单的试验,它们之间的差别惊人! StringBuffer: public void testStringBuffer() { long st ...
- CF-358D-Dima and Hares【T^T+*^*】
[文章标题打着转载,是因为不是自己想出来的解题,但下面的文字是自己敲的[~捂脸*>_<*~]] 题目就不贴了~~~DP+greedy的题.弱爆了看别人的代码思路过的.T^T但还是自己复述一 ...
- HDU 4747 Mex(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意:给出一个数列A.计算所有的mex(i,j)之和.1<=i<=j<=n. ...