Leetcode 65 Valid Number

分类讨论的项比较多

先观察给的例子,还有题目给的提示——valid答案中可以包含的字符

发现:

"+ - "要么在开头,要么紧跟着e,只有这两个位置

"e",前后必须有数字,且之前不能出现过e

". ",前面不能出现过e或". "

所以我们可以用几个flag

seenNum表示之前出现过数字

seenNumAfterE 表示e之后有数字

dot表示之前出现过". "

e表示之前出现过e

注意初始化的时候seenNumAfterE = true,因为s不一定包含e,等出现e再将它设为false。其它flag都设为false

最后返回 seenNum && seenNumAfterE

 1 class Solution {
 2     public boolean isNumber(String s) {
 3         boolean seenNum = false, seenNumAfterE = true;
 4         boolean dot = false, e = false;
 5         s = s.trim(); //去掉首尾的空格
 6         int count = 0;
 7         for(char i : s.toCharArray()){
 8             if(i >= '0' && i <= '9'){
 9                 seenNum = true;
10                 seenNumAfterE = true;
11             }else if(i == '.'){
12                 if(e || dot)
13                     return false;
14                 dot = true;
15             }else if(i == 'e'){
16                 if(e || !seenNum)
17                     return false;
18                 seenNumAfterE = false;
19                 e = true;
20             }else if(i == '+' || i == '-'){
21                 if(count != 0 && s.charAt(count - 1) != 'e')
22                     return false;
23             }else
24                 return false;
25             
26             count++;
27         }
28         
29         return seenNum && seenNumAfterE;
30     }
31 }
原文地址:https://www.cnblogs.com/hwd9654/p/10987558.html