[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示數值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。【解答思路】
1. 標記多狀態
時間復雜度:O(N) 空間復雜度:O(1)
class Solution {public boolean isNumber(String s) {if(s == null || s.length() == 0){return false;}//標記是否遇到相應情況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] == '.'){//.之前不能出現.或者eif(dotSeen || eSeen){return false;}dotSeen = true;}else if(str[i] == 'e' || str[i] == 'E'){//e之前不能出現e,必須出現數if(eSeen || !numSeen){return false;}eSeen = true;numSeen = false;//重置numSeen,排除123e或者123e+的情況,確保e之后也出現數}else if(str[i] == '-' || str[i] == '+'){//+-出現在0位置或者e/E的后面第一個位置才是合法的if(i != 0 && str[i-1] != 'e' && str[i-1] != 'E'){return false;}}else{//其他不合法字符return false;}}return numSeen;} }2. 狀態機
時間復雜度:O(N) 空間復雜度:O(1)
【總結】
1.分情況討論一定要細致 安排得明明白白
2. 狀態機有利于多情況討論
轉載鏈接: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/
總結
以上是生活随笔為你收集整理的[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: firework、301重定向、二级域名
- 下一篇: linux 进入一个中文乱码的目录的方法