麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Leetcode: Valid Number

2019-11-14 21:19:17
字體:
來源:轉載
供稿:網友
Leetcode: Valid Number
Validate if a given string is numeric.Some examples:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => trueNote: It is intended for the PRoblem statement to be ambiguous. You should gather all requirements up front before implementing one.

這是一道檢查字符串輸入是否為合法的題目?;疽巹t是按照科學計數法,所以會出現的特殊字符有以下幾個:符號位‘+’,‘-’,小數點‘.’,還有‘e’和‘E’,剩下的就只有數字0-9了,其他字符如果出現就是非法字符,返回false。數字字符在哪里出現都是ok的,我們主要考慮幾個特殊字符的情況。對于小數點出現的時候,我們要滿足一下這些條件:(1)前面不能有小數點或者‘e’和‘E’;(2)前一位是數字(不能是第一位)或者后一位要是數字(不能是最后一位)。對于正負號出現的情況,要滿足條件:(1)必須是第一位或者在‘e’和‘E’后一位;(2)不能是最后一位且后一位要是數字或者‘.’ (“+.8”是true的,這里其實結合了小數點正確的判斷即小數點前或者后有一個數字)。對于‘e’和‘E’的情況,要滿足:(1)前面不能有‘e’和‘E’出現過;(2)不能是第一位(前面沒數字科學計數沒有意義)或者最后一位(后面沒數字就不用寫指數了)。根據上面列舉的情況,我們用兩個標簽和做前后位的判斷來實現,算法復雜度比較明顯是O(n)的,只需要O(1)的額外空間。代碼如下:

其中最難理解第11行,要這樣理解:小數點正確的出現方式是————除了不能有小數點或者‘e’和‘E’之外,前一位或后一位至少有一個數字,說的確切一點是:(前一位是數字&&不是第一位)||(后一位是數字&&不是最后一位)。這里只需要前一位或者后一位是數字就好了,不需要都是,舉個例子就是比如".1"是true的。本例是要找出那些小數點錯誤出現的case來return false,而小數點錯誤出現的條件就是不滿足上面正確出現的條件,所以對上面正確條件取反,進而得到:(是第一位||前一位不是數字)&&(是最后一位||后一位不是數字),這就是小數點錯誤出現的條件,即

(i==0 || !(s.charAt(i-1)>='0' && s.charAt(i-1)<='9')) && (i==s.length()-1 || !(s.charAt(i+1)>='0' && s.charAt(i+1)<='9'))

同理,比較難理解的還有18行,還是這樣,先寫符號位‘+’,‘-’正確出現的方式--------

(i==0 || s.charAt(i-1)=='e' || s.charAt(i-1)=='E') && i<s.length()-1 && (s.charAt(i+1)>='0' && s.charAt(i+1)<='9' || s.charAt(i+1)=='.')

那么,先寫符號位‘+’,‘-’不正確出現的方式就是取反:

(i>0 && s.charAt(i-1)!='e' && s.charAt(i-1)!='E') || i==s.length()-1 || !(s.charAt(i+1)>='0' && s.charAt(i+1)<='9' || s.charAt(i+1)=='.')

如果嫌自己去獲得取反之后的表達式比較麻煩,那么就可以直接加上括號再取反

比如:小數點的情況!((i!=0 && (s.charAt(i-1)>='0' && s.charAt(i-1)<='9')) || (i!=s.length()-1 && (s.charAt(i+1)>='0' && s.charAt(i+1)<='9')))

 1 public class Solution { 2     public boolean isNumber(String s) { 3         if (s == null) return false; 4         s = s.trim(); 5         if (s.length() == 0) return false; 6         boolean dotFlag = false; 7         boolean eFlag = false; 8         for (int i=0; i<s.length(); i++) { 9             switch(s.charAt(i)) {10                 case '.': 11                     if (dotFlag || eFlag || (i==0 || !(s.charAt(i-1)>='0' && s.charAt(i-1)<='9')) && (i==s.length()-1 || !(s.charAt(i+1)>='0' && s.charAt(i+1)<='9'))) {12                         return false;13                     }14                     dotFlag = true;15                     break;16                 case '+':17                 case '-':18                     if ((i>0 && (s.charAt(i-1)!='e') && s.charAt(i-1)!='E') || i==s.length()-1 || !(s.charAt(i+1)>='0' && s.charAt(i+1)<='9' || s.charAt(i+1)=='.')) {19                         return false;20                     }21                     break;22                 case 'E':23                 case 'e':24                     if (eFlag || i==0 || i==s.length()-1) {25                         return false;26                     }27                     eFlag = true;28                     break;29                 case '0':30                 case '1':31                 case '2':32                 case '3':33                 case '4':34                 case '5':35                 case '6':36                 case '7':37                 case '8':38                 case '9':39                     break;40                 default: return false;41             }42         }43         return true;44     }45 }

特殊的情況包括“”以及“ ”,都是false的,但是如果我們不特殊處理,程序將會輸出true,所以要在開頭s.trim()了之后進行一個判斷


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美三级欧美成人高清www | 国产精品久久久久久久久久iiiii | 91香蕉影视| 国产毛片网站 | 亚洲视色 | 羞羞答答xxdd在线播放 | 欧美三级日本三级少妇99 | 娇妻被各种姿势c到高潮小说 | 天天都色视频 | 在线观看国产一区二区 | 国产亚洲精品久久午夜玫瑰园 | 国产精品www | 91精品国产91久久久久久丝袜 | 国产91久久久久久 | 亚洲一区二区中文字幕在线观看 | 久久精品观看 | 亚洲国产精品一区二区精品 | 亚洲成人福利在线观看 | 法国极品成人h版 | 九九热精彩视频 | 日本va在线观看 | 最新av在线免费观看 | 永久免费黄色片 | hd性videos意大利复古 | 双性精h调教灌尿打屁股的文案 | 蜜桃精品视频 | 精品在线观看一区二区三区 | 538任你躁在线精品视频网站 | 亚洲成人精品在线 | 久久免费看片 | 嗯~啊~弄嗯~啊h高潮视频 | 九一成人 | 极品美女一级毛片 | 精品亚洲视频在线 | 99视频在线观看视频 | 欧美精品一区二区三区久久久 | 国产精品视频一区二区三区综合 | videos 欧美| 国产亚洲欧美在线视频 | 成人午夜a | 国产视频在线免费观看 |