如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                題解分析代碼實現(xiàn)
實現(xiàn)一個函數(shù)用來判斷字符串是否表示數(shù)值(包括整數(shù)和小數(shù))。
題解分析
一個標(biāo)識數(shù)字的字符串可能包括以下字符類型:
- 空格; 
- 數(shù)組:0~9; 
- 正負(fù)號 
- 小數(shù)點 
- 冪符號:e/E; 
為了解決此類問題,需要使用有限狀態(tài)自動機,字符串有如下狀態(tài):
- 0:開始的空格; 
- 1:冪符號前的正負(fù)號; 
- 2:小數(shù)點前的數(shù)字; 
- 3:小數(shù)點、小數(shù)點后的數(shù)字; 
- 4:小數(shù)點前為空格時:小數(shù)點、小數(shù)點后的數(shù)字; 
- 5:冪符號; 
- 6:冪符號后的正負(fù)號; 
- 7:冪符號后的數(shù)字; 
- 8:結(jié)尾的空格; 
 合法的結(jié)束狀態(tài)有:2、3、7、8。
狀態(tài)轉(zhuǎn)移如下圖所示:
states復(fù)雜度分析:
- 時間:需要遍歷整個字符串的長度,且狀態(tài)轉(zhuǎn)移為O(1),所以為O(N); 
- 空間:只需常數(shù)額外空間,所以為O(1); 
代碼實現(xiàn)
狀態(tài)使用字典列表表示,具體實現(xiàn)為:
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
????}
}
總結(jié)
以上是生活随笔為你收集整理的如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python websocket服务器h
- 下一篇: JS实现图片循环滚动
