[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【問(wèn)題描述】[中等]
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)用來(lái)判斷字符串是否表示數(shù)值(包括整數(shù)和小數(shù))。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示數(shù)值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。【解答思路】
1. 標(biāo)記多狀態(tài)
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
class Solution {public boolean isNumber(String s) {if(s == null || s.length() == 0){return false;}//標(biāo)記是否遇到相應(yīng)情況boolean numSeen = false;boolean dotSeen = false;boolean eSeen = false;char[] str = s.trim().toCharArray();for(int i = 0;i < str.length; i++){if(str[i] >= '0' && str[i] <= '9'){numSeen = true;}else if(str[i] == '.'){//.之前不能出現(xiàn).或者eif(dotSeen || eSeen){return false;}dotSeen = true;}else if(str[i] == 'e' || str[i] == 'E'){//e之前不能出現(xiàn)e,必須出現(xiàn)數(shù)if(eSeen || !numSeen){return false;}eSeen = true;numSeen = false;//重置numSeen,排除123e或者123e+的情況,確保e之后也出現(xiàn)數(shù)}else if(str[i] == '-' || str[i] == '+'){//+-出現(xiàn)在0位置或者e/E的后面第一個(gè)位置才是合法的if(i != 0 && str[i-1] != 'e' && str[i-1] != 'E'){return false;}}else{//其他不合法字符return false;}}return numSeen;} }2. 狀態(tài)機(jī)
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
【總結(jié)】
1.分情況討論一定要細(xì)致 安排得明明白白
2. 狀態(tài)機(jī)有利于多情況討論
轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/solution/mian-shi-ti-20-biao-shi-shu-zhi-de-zi-fu-chuan-y-2/
參考鏈接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/solution/javaban-ben-ti-jie-luo-ji-qing-xi-by-yangshyu6/
總結(jié)
以上是生活随笔為你收集整理的[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: firework、301重定向、二级域名
- 下一篇: postgreSQl pathman 用