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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值