博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Valid Number
阅读量:4152 次
发布时间:2019-05-25

本文共 3182 字,大约阅读时间需要 10 分钟。

class Solution {//finite state machine//status 1 => 小数点前面的部分//status 2 => 小数点后到'e'前面的部分//status 3 => e后面的科学计数法部分//should practice couple times morepublic:	bool isNumber(const char *s) {		// Start typing your C/C++ solution below		// DO NOT write int main() function		bool bIntNum = false;		int nCurState = 1;		while (true)		{			if (nCurState == 1)			{				while (*s == ' ')					s++;				if (*s == '+' || *s == '-')					s++;				if (*s >= '0' && *s <= '9')				{					while (*s >= '0' && *s <= '9')						s++;					bIntNum = true;				}				if (*s == '.' /*&& bIntNum*/) //.34 true				{					nCurState = 2;					s++;					continue;				}				else if (*s == 'e' && bIntNum)//go to state 3, there must have bIntNum before				{					nCurState = 3;					s++;					continue;				}				while (*s == ' ')					s++;				return (bIntNum && *s == 0);			}			else if (nCurState == 2)//1. true			{				//bIntNum = false;				if (*s >= '0' && *s <= '9')				{					while (*s >= '0' && *s <= '9')						s++;					bIntNum = true;				}				if (*s == 'e' && bIntNum)//go to state 3, there must have bIntNum before				{					nCurState = 3;					s++;					continue;				}				while (*s == ' ')					s++;				return (bIntNum && *s == 0);//if there is no e, then there must have bIntNum, such as ".23" or "1."			}			else//nCurState 3 need judge if there is bIntNum again, because "1e" is illegal			{				bIntNum = false;				if (*s == '+' || *s == '-')					s++;				if (*s >= '0' && *s <= '9')				{					while (*s >= '0' && *s <= '9')						s++;					bIntNum = true;				}				while (*s == ' ')					s++;				return (*s == 0 && bIntNum);			}		}	}};

second time

class Solution {//finite automatapublic:    vector
> transTable; int inputType(char a) { if(a == ' ') return 0; else if(a == '+' || a == '-') return 1; else if(a >= '0' && a <= '9') return 2; else if(a == '.') return 3; else if(a == 'e') return 4; else return 5;//illegal input } void initTransTable() { transTable.resize(9, vector
(5, -1)); transTable[0][0] = 0; transTable[0][1] = 1; transTable[0][2] = 2; transTable[0][3] = 7; transTable[7][2] = 3; transTable[1][2] = 2; transTable[1][3] = 7; transTable[2][2] = 2; transTable[2][0] = 6; transTable[2][3] = 3; transTable[2][4] = 4; transTable[3][2] = 3; transTable[3][4] = 4; transTable[3][0] = 6; transTable[4][1] = 8; transTable[8][2] = 5; transTable[4][2] = 5; transTable[5][2] = 5; transTable[5][0] = 6; transTable[6][0] = 6; } bool isNumber(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function if(s == NULL) return false; initTransTable(); int curState = 0; while(*s != '\0') { int curInput = inputType(*s); if(curInput == 5) return false; curState = transTable[curState][curInput]; if(curState == -1) return false; s++; } if(curState == 2 || curState == 3 || curState == 5 || curState == 6) return true; else return false; }};

转载地址:http://shxti.baihongyu.com/

你可能感兴趣的文章
Linux删除旧内核
查看>>
ubuntu下的latex用beamer制作演示文稿时中文书签乱码解决方法
查看>>
Ubuntu TexMaker使用ibus无法输入中文,快捷键冲突
查看>>
C 宏定义的简单总结
查看>>
解决Ubuntu Adobe Reader 菜单栏空白
查看>>
如何提高程序效率
查看>>
关于ARM的C语言优化
查看>>
C语言编程优化运行速度
查看>>
DMA burst 基本概念
查看>>
国内大学论文latex模板链接
查看>>
C语言小记
查看>>
西西弗斯的神话
查看>>
五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
查看>>
【转】伺服电机三环控制的原理(位置环,运动环,电流环)
查看>>
Ubuntu 卸载软件及其配置
查看>>
终端特殊字符
查看>>
stm32 加密
查看>>
关于 STM32 的 IAP 概念和应用笔记
查看>>
vim折叠设置(转载)
查看>>
简明 Vim 练级攻略
查看>>