Valid Number

Validate if a given string is numeric.
Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

思路:

这题我做的极其麻烦。但http://www.jiuzhang.com/solutions/valid-number/ 和http://www.cnblogs.com/yuzhangcmu/p/4060348.html的答案妙极啊。

我抄在这里~背诵一遍。他们的思路是:

首先我们看,能够出现的符号有:'e', 'E', '.' , '+', '-', '0 ~ 9'。 所以如果出现了别的东西,直接return false

再者,这些符号出现的顺序是有讲究的。

对于‘e’ 和 ‘E’:e的前后都要有数字,不会一e为开头或结尾;不可能出现两个e。

对于‘.' :不可能在e后面出现,不会有两个‘.’。

对于‘+/-’:只能出现在最开头或者紧跟‘e’。

所以我们从头到尾读取,用三个flag表示这些符号的出现状态,思路就很清楚了!看代码吧

 1 public boolean isNumber(String s) {
 2         // Write your code here
 3         if (s == null) {
 4             return false;
 5         }
 6         String newS = s.trim();
 7         boolean num = false;
 8         boolean exp = false;
 9         boolean dot = false;
10         for (int i = 0; i < newS.length(); i++) {
11             if (newS.charAt(i) == 'e' || newS.charAt(i) == 'E') {
12                 if (!num || exp) {
13                     return false;
14                 }else{
15                     exp = true;
16                     num = false;
17                 }
18             }else if(newS.charAt(i) == '.') {
19                 if (exp || dot) {
20                     return false;
21                 }else{
22                     dot = true;
23                 }
24             }else if(newS.charAt(i) == '+' || newS.charAt(i) == '-') {
25                 if (i != 0 && newS.charAt(i - 1) != 'e' && newS.charAt(i - 1) != 'E') {
26                     return false;
27                 }
28             }else if(newS.charAt(i) >= '0' && newS.charAt(i) <= '9') {
29                 num = true;
30             }else{
31                 return false;
32             }
33         }
34         return num;
35     }

 

posted @ 2015-06-01 02:49  GoNuts  阅读(222)  评论(0编辑  收藏  举报