leetcode_065 Valid Number
2016-03-22 21:12
302 查看
题目分析:判断一个数是否是合法数。
解题分析:通过绘制有限状态自动机来实现。
各个状态具体如下:
1)初始状态,无输入或者只有space的状态;
2)输入了数字之后的状态;
3)输入数字,然后输入小数点的状态;
4)输入数字,输入e的状态;
5)终止状态;
6)前面无数字,只输入小数点的状态;
7)输入小数点后输入数字的状态;
8)输入e之后输入符号的状态;
9)输入e之后输入数字的状态。
解题分析:通过绘制有限状态自动机来实现。
各个状态具体如下:
1)初始状态,无输入或者只有space的状态;
2)输入了数字之后的状态;
3)输入数字,然后输入小数点的状态;
4)输入数字,输入e的状态;
5)终止状态;
6)前面无数字,只输入小数点的状态;
7)输入小数点后输入数字的状态;
8)输入e之后输入符号的状态;
9)输入e之后输入数字的状态。
class Solution { public: bool isNumber(string s) { int start = 0; int end = s.length() - 1; while (start <= end) { if (s[start] != ' ' && s[end] != ' ') { break; } if (s[start] == ' ') { start++; } if (s[end] == ' ') { end--; } } if (start <= end) { s = s.substr(start, end + 1 - start); } else { return false; } int status = 1; for (int i = 0; i < s.length(); i++) { char ch = s[i]; //处理状态1情况(初始状态) if (status == 1) { if (ch >= '0' && ch <= '9') { status = 2; } else if (ch == '.') { status = 6; } else if (ch == '+' || ch == '-') { status = 1; } else { cout << "hehe" << endl; status = 5; } } //处理状态2情况(输入了数字之后的状态) else if (status == 2) { if (ch >= '0' && ch <= '9') { status = 2; } else if (ch == '.') { status = 3; } else if (ch == 'e' || ch == 'E') { status = 4; } else { status = 5; } } //处理状态3情况(输入数字,然后输入小数点状态) else if (status == 3) { if (ch >= '0' && ch <= '9') { status = 3; } else if (ch == 'e' || ch == 'E') { status = 4; } else { status = 5; } } //处理状态4情况(输入数字,输入e状态) else if (status == 4) { if (ch >= '0' && ch <= '9') { status = 9; } else if (ch == '+' || ch == '-') { status = 8; } else { status = 5; } } //处理状态5情况(终止状态) else if (status == 5) { cout << "lala" << endl; break; } //处理状态6情况(前面无数字,只输入了小数点的状态) else if (status == 6) { if (ch >= '0' && ch <= '9') { status = 7; } else { status = 5; } } //处理状态7情况(输入小数点后输入数字状态) else if (status == 7) { if (ch >= '0' && ch <= '9') { status = 7; } else if (ch == 'e' || ch == 'E') { status = 4; } else { status = 5; } } //处理状态8情况(输入e之后输入符号的状态 ) else if (status == 8) { if (ch >= '0' && ch <= '9') { status = 9; } else { status = 5; } } //处理状态9情况(输入e后输入数字的状态) else if (status == 9) { if (ch >= '0' && ch <= '9') { status = 9; } else { status = 5; } } } if (status == 5 || status == 1 || status == 6 || status == 4 || status == 8) { return false; } return true; } };
相关文章推荐
- Linux下iptables开放端口端示例
- 银行家算法(1)——概念与举例说明(多进程管理资源分配避免死锁)
- SCSI reservation conflicts trying to use a shared disk on RHEL in a VMware environment
- OC 中new与alloc/init的区别
- Android App HelloWorld
- BZOJ 1197: [HNOI2006]花仙子的魔法
- POJ1905 Expanding Rods(二分)
- pat--列出连通集
- 只需轻松四句话,5分评分轻而易举
- [BZOJ2705] [SDOI2012] Longge的问题 - 欧拉函数
- Android开发随笔之自定义TitleBar
- HDU 2609 How many
- golang日志中心取日志代码分享
- 如何实现在Oracle中应用存储过程调用MatLab函数(3)
- 项目记录31--unity 简单分析LuaFramework_UGUI
- loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
- Uber新功能:隐藏司机乘客们的手机号码
- 结对作业4词频统计
- Linux内核分析——第五周学习笔记
- 设计模式学习笔记