leetcode做题记录0065
发布日期:2021-05-07 13:48:30 浏览次数:24 分类:精选文章

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

leetcode 0065

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

参考

参考自置顶题解,链接如下:

思路

想着把所有情况考虑一遍,最后写着写着心态崩了。

看答案用有限状态机,奇怪的知识增加了,答案真的秀。

有三个可接受状态,6是普通接收状态,3是带小数点的接收状态,5是带e的接收状态。

8是特例,代表356后面还可以加空格,也能接受。

其他都是中间状态。

不多说了好吧,作者太顶。

class Solution {       public int make(char c) {   		switch (c) {   		case ' ':			return 0;		case '+':		case '-':			return 1;		case '.':			return 3;		case 'e':			return 4;		default:			if (c >= 48 && c <= 57)				return 2;		}		return -1;	}	public boolean isNumber(String s) {   		int state = 0;		int[][] transfer = {    {    0, 1, 6, 2, -1 }, 						   {    -1, -1, 6, 2, -1 }, 						   {    -1, -1, 3, -1, -1 },						   {    8, -1, 3, -1, 4 }, 						   {    -1, 7, 5, -1, -1 }, 						   {    8, -1, 5, -1, -1 }, 						   {    8, -1, 6, 3, 4 },						   {    -1, -1, 5, -1, -1 }, 						   {    8, -1, -1, -1, -1 } };		char[] ss = s.toCharArray();		for (int i = 0; i < ss.length; ++i) {   			int id = make(ss[i]);			if (id < 0)				return false;			state = transfer[state][id];			if (state < 0)				return false;		}		if (state == 3 || state == 5 || state == 6 || state == 8) {   			return true;		} else {   			return false;		}	}}
上一篇:leetcode做题记录0066
下一篇:leetcode做题记录0064

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月31日 17时44分38秒