如何判斷輸入的是字符還是數字_[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.pswp.cn/news/443093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443093.shtml
英文地址,請注明出處:http://en.pswp.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…