如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字

题解分析代码实现

实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

题解分析

一个标识数字的字符串可能包括以下字符类型:

  • 空格;

  • 数组:0~9;

  • 正负号

  • 小数点

  • 幂符号:e/E;

为了解决此类问题,需要使用有限状态自动机,字符串有如下状态:

  • 0:开始的空格;

  • 1:幂符号前的正负号;

  • 2:小数点前的数字;

  • 3:小数点、小数点后的数字;

  • 4:小数点前为空格时:小数点、小数点后的数字;

  • 5:幂符号;

  • 6:幂符号后的正负号;

  • 7:幂符号后的数字;

  • 8:结尾的空格;
    合法的结束状态有:2、3、7、8。

状态转移如下图所示:

cc551a4305d6c0c3466130d9fabfa4f7.png

states

复杂度分析:

  • 时间:需要遍历整个字符串的长度,且状态转移为O(1),所以为O(N);

  • 空间:只需常数额外空间,所以为O(1);

代码实现

状态使用字典列表表示,具体实现为:

func isNumber(strNum string) bool {
    state := []map[byte]int{
        {' ':0, 's':1, 'd':2, '.':4},    // 0: start with 'blank'
        {'d':2, '.':4},                  // 1: 'sign' before e
        {'d':2, '.':3, 'e':5, ' ':8},    // 2: 'digit' before '.'
        {'d':3, 'e':5, ' ':8},           // 3: 'digit' after '.'
        {'d':3},                         // 4: 'digit' after '.'(‘blank’ before 'dot')
        {'s':6, 'd':7},                  // 5: 'e'
        {'d':7},                         // 6: 'sign' after 'e'
        {'d':7, ' ':8},                  // 7: 'digit' after e
        {' ':8},                         // 8: end with 'blank'
    }

    index := 0
    var key byte
    for _,ch := range strNum {
        if ch>='0' && ch <= '9'{
            key = 'd'
        }else {
            switch ch {
            case '+', '-':
                key = 's'
            case 'e', 'E':
                key = 'e'
            case '.', ' ':
                key = byte(ch)
            default:
                key = '?'
            }
        }

        if _,ok:=state[index][key]; !ok{
            return false
        }
        index = state[index][key]
    }

    switch index {
    case 2,3,7,8:
        return true
    default:
        return false
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql索引优化面试题_mysql索引优化面试题

曾经偷偷的面试了两个单位&#xff0c;都提到了Mysql的优化问题&#xff0c;所以以后要多多学习数据库的优化知识了。建设数据库的优化大概主要就是索引的优化了吧&#xff0c;因为我们不可能修改数据结构的情况下&#xff0c;提高数据库的查询效率似乎也只能用索引了。当然这也…

python 可视化大屏幕_如何用python搭建可视化看板?

可视化看板是指大屏 驾驶舱 dashboard这些吗&#xff0c;如果是&#xff0c;那不建议用python来做&#xff0c;不专业&#xff0c;目前没有见过哪个项目上的大屏是用python做的&#xff0c;它不是万能的大屏的制作一般是这样的先根据用户的需求&#xff0c;所在的行业&#xff…

mysql语句转为sql语句_MySQL 的分页查询 SQL 语句(转)

转自 https://www.cnblogs.com/wbxk/p/10644766.htmlMySQL一般使用 LIMIT 实现分页。基本语句为&#xff1a;SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小数据量的情况下&#xff0c;这样的SQL足够用了&#xff0c;唯一需要注意的问题就是确保使用了索引。举例…

mysql查询选课最少成绩最高_MySQL 练习

最近在学习MYSQL 数据库&#xff0c;在此mark 一下做过的sql 相关练习表结构如下&#xff1a;teacher表tidtnameclass表cidcaptioncourse表cidcnameteacher_idstudent表sidgenderclass_idsnamescore表sidstudent_idcourse_idnumclass :teacher : course : student :score : 根…

mysql中nchar_浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

1&#xff0c;定义&#xff1a;char&#xff1a; 固定长度&#xff0c;存储ANSI字符&#xff0c;不足的补英文半角空格。nchar&#xff1a; 固定长度&#xff0c;存储Unicode字符&#xff0c;不足的补英文半角空格varchar&#xff1a; 可变长度&#xff0c;存储ANSI字符&…

mysql 5.764_RHEL5.764位源码编译安装MySQL-5.5.42遇到的问题

由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看下系由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看…

java 判断子类_java判断class是否是某个类的子类或父类

Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 免费学习视频分享:java视频教程 实例:通过反射得到List 集合中的泛型类型package com.zf.ta…

java转日期_Java时间日期格式转换

import java.util.*;import java.text.*;importjava.util.Calendar;public classVeDate {/*** 获取现在时间**return返回时间类型 yyyy-MM-dd HH:mm:ss*/public staticString getNowDate() {Date currentTime newDate();SimpleDateFormat formatter new SimpleDateFormat("…

java 对比工具_Java几款性能分析工具的对比

在给客户进行应用程序维护的过程中&#xff0c;我注意到一些关于高负载条件下的性能问题。理论上&#xff0c;增加对应用程序的负载会使性能有所下降&#xff0c;但是我认为性能下降的比率远远高于负载的增加&#xff0c;同时我也发现&#xff0c;性能可以通过改变应用程序的逻…

java for循环获取value_Java遍历取出Map集合key-value数据的4种方法

将map集合存数据与取出数据全部放在一个类MapTest中&#xff0c;方便阅读与查看随便创建一个包&#xff0c;在包中新建一个class文件&#xff0c;(也可以不建包&#xff0c;直接新建一个class文件)新建class文件MapTest.java,代码如下&#xff1a;import java.util.HashMap;imp…

as3调用java_关于openamf我用as3链接java程序,并调用相关的方法,但是能够连上,却不能够调用是怎么回事...

我用的openamf做flashremoting服务器是没问题的&#xff01;这是as的代码&#xff01;package{importflash.display.Sprite;importflash.net.ObjectEncoding;importcom.riafan.remoting.PendingCall;import...我用的openamf做flash remoting服务器是没问题的&#xff01;这是as…

phoenix hbase java_java jdbc访问hbase phoenix

上面直接介绍了druid访问hbase phoenix的案例hbase Phoenix整合mybatis DruidDataSource这里还是贴一下jdbc直接访问的方式。public static void main(String[] args) {try {Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");Properties propertiesnew Prope…

mp4v2 写mp4 java_使用mp4v2将H264+AAC合成mp4文件

录制程序要添加新功能&#xff1a;录制CMMB电视节目&#xff0c;我们的板卡发送出来的是RTP流(H264视频和AAC音频)&#xff0c;录制程序要做的工作是&#xff1a;(1)接收并解析RTP包&#xff0c;分离出H264和AAC数据流&#xff1b;(2)将H264视频和AAC音频以某种格式封装&#x…

java完全解耦_java-完全解耦

完全解耦&#xff1a;降低代码的限制性&#xff0c;是同一代码能够用到更多的程序中1 packageinterfaces.interfaceprocessor;2 import staticnet.mindview.util.Print.print;34 interfaceProcessor {5 String name();6 Object process(Object input);7 }8 public classApply{9…

java验证xml格式是否正确的是_spring源码附录(1)java实现对XML格式的验证

最近在看spring源码&#xff0c;涉及到xml文档的解析、xml文档的格式验证&#xff0c;发现自己对xml解析的基础较为薄弱&#xff0c;本篇博客复习下DOM方式解析xml(即spring解析xml的方式)。DOM解析XML是将整个XML作为一个对象&#xff0c;占用内存较多。另外一个java官方的XML…

java 批量打印_JAVA批量打印皕杰报表

原标题&#xff1a;JAVA批量打印皕杰报表不使用皕杰报表工具条上的打印按钮&#xff0c;用java怎么实现批量打印皕杰报表呢&#xff1f;解决方案&#xff1a;皕杰报表提供了批量打印的工具类ReportToolkits&#xff0c;ReportToolkits类参考帮助文档-开发指南-javadoc-bios.rep…

java 截串_java字符串截取

import org.apache.commons.lang.stringutils;public class substr{public static void main(string[] args) {string str "1234567890abcdefg";system.out.println("-----------" str.substring(0)); //从字符串索引为0开始截取&#xff0c;一直到字符串…

java json 构造_json 构造和解析

目录&#xff1a;(1)引入jar包&#xff1b;(2)json的构造&#xff1b;(3)json的解析&#xff1b;(4)遍历未知key。(1)java对json的处理&#xff0c;可借助org.json.jar.org.jsonjson20090211(2)json的构造//construct json and output itpublic String constructJson() throws …

java http 上传文件_java利用httpClient实现后台文件上传请求

之前写过基于html和js的文件上传方法java 用springMVC 和HttpServletRequest 两种实现文件上传的方法和httpClient后台执行普通post请求的文章java通过httpClient从接口请求数据入库以及自动生成实体工具类&#xff0c;最近接到一个需求&#xff0c;需要用到后台去调用远程服务…

morse java_华威MORSE,华威数统那个比较好?

其实没什么高下之分了。 毕竟大家都在一个系&#xff0c;上下课交作业都在一起。我个人觉得&#xff0c;数统要比morse更flexible一些。首先你要明白morse和数统课程上的区别在哪里:数统 大一必修数统大一必修共计84CATSmorse大一必修morse大一必修共计120CATS其实差的就是EC10…