剑指offer之表示数值的字符串
题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
解题思路
有限状态自动机。正好复习下有限状态自动机的方法。DFA的基本方法是使用一个while
死循环,作为底层驱动,然后有个状态标记再各个状态之间进行变换。这类题目的难点往往在于如何正确的划分各个状态。下面给出本题目的状态图:
核心的思想在于,区分了各种类型数据和符号的状态
AC代码
class Solution {public:enum STATE { START, INT, SIGNED1, POINT, EXP, FLOAT, SCIENCE, SIGNED2 };bool isNumeric(char* str){if (str == nullptr) {return false;}STATE state = STATE::START;int i = 0;while (true) {switch (state){case STATE::START:if (str[i] == '+' || str[i] == '-') {state = STATE::SIGNED1;}else if (isdigit(str[i])) {state = STATE::INT;}else if (str[i] == '.') {state = STATE::POINT;}else {return false;}break;case STATE::SIGNED1:if (str[i] == '.') {state = STATE::POINT;}else if (isdigit(str[i])) {state = STATE::INT;}else {return false;}break;case STATE::POINT:if (isdigit(str[i])) {state = STATE::FLOAT;} else {return false;}break;case STATE::INT:if (isdigit(str[i])) {state = STATE::INT;}else if (str[i] == '\0') { // 结束状态return true;}else if (str[i] == '.') {state = STATE::FLOAT;}else if (str[i] == 'E' || str[i] == 'e') {state = STATE::EXP;}else {return false;}break;case STATE::FLOAT:if (isdigit(str[i])) {state = STATE::FLOAT;}else if (str[i] == 'e' || str[i] == 'E') {state = STATE::EXP;}else if (str[i] == '\0') {return true;}else {return false;}break;case STATE::EXP:if (str[i] == '+' || str[i] == '-') {state = STATE::SIGNED2;}else if (isdigit(str[i])) {state = STATE::SCIENCE;}else {return false;}break;case STATE::SCIENCE:if (isdigit(str[i])) {state = STATE::SCIENCE;}else if (str[i] == '\0') {return true;}else {return false;}break;case STATE::SIGNED2:if (isdigit(str[i])) {state = STATE::SCIENCE;}else {return false;}break;default:return false;}++i; // 移动指针}}};
剑指offer之表示数值的字符串相关推荐
- 【LeetCode】剑指 Offer 20. 表示数值的字符串
[LeetCode]剑指 Offer 20. 表示数值的字符串 文章目录 [LeetCode]剑指 Offer 20. 表示数值的字符串 package offer;import java.util. ...
- 剑指offer:表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...
- 剑指offer:表示数值的字符串cpp题解:指针
文章目录 题目来源 分析 题意:需要判断是小数和科学计数法. 这里的奇淫巧计是:e之前必须是数(小数或者整数):e后面需要是整数(可以有符号位) 这就启发我们:用一个指针i,从前往后遍历,确定是否是数 ...
- leetcode剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123"."3.1416&q ...
- 【LeetCode笔记】剑指 Offer 20. 表示数值的字符串(Java、字符串)
文章目录 题目描述 思路 && 代码 题目描述 呃-比较恶心的一道题,需要读好题,分完情况再下手 有看到dalao用有限状态机来做,不过这边还是直接用了我自己的做法= = 思路 &am ...
- 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
[LeetCode]剑指 Offer 58 - II. 左旋转字符串 文章目录 [LeetCode]剑指 Offer 58 - II. 左旋转字符串 一.字符串切片 二.列表遍历拼接 三.字符串遍历拼 ...
- 剑指 Offer II 117. 相似的字符串
链接:剑指 Offer II 117. 相似的字符串 题解: 1.建设图 2.bfs遍历 class Solution { public:int numSimilarGroups(vector< ...
- 剑指offer——面试题28:字符串的排列
剑指offer--面试题28:字符串的排列 Solution1: 2018年9月2日重做 典型的DFS套路,LeetCode 46 && 47 [46]https://blog.csd ...
- 算法Day8|字符串专题二 剑指 Offer 58 - II. 左旋转字符串,28. 找出字符串中第一个匹配项的下标,459. 重复的子字符串
剑指 Offer 58 - II. 左旋转字符串 解题思路: 反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串 class Solution {public String reverse ...
最新文章
- Go 1.9 新特性
- 第二章 如何学习Linux(鸟哥的Linux私房菜基础学习篇)
- feign 第一次调用超时_Feign ,3步搞定 HTTP 请求
- cmd 删除文件夹_永远不要碰的5个macOS文件夹及原因
- 让自己的user能够看到S4 product master这个tile
- php抽奖概率算法(刮刮卡,大转盘)
- WSDM Cup 2020大赛金牌参赛方案全解析
- linux 的学习笔记-linux 指令大全
- 神经网络的理解和计算
- java 常用富文本编辑器_常用的六个富文本编辑器
- PowerDesigner关联表结构表示一对一或一对多
- 在ArcMap中制作Python加载项点击小班依次编号
- 副业刚需——做哪些自媒体确实可以挣到钱?
- 微信公众号批量打标签的自动化实现方法
- Zotero-word中引用跳转到参考文献/建立超链接-引用格式(Xie et al 2021, Achanta et al 2012)
- java唱哪首歌好听_非常适合KTV演唱的100首新歌,Hold住全场,非常好听!
- ACRush 楼天城 回忆录
- c# AutoCAD 操作交互
- SAP 固定资产减值准备的处理方法
- UVA-12627(考眼力~)