-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path20-表示数值的字符串.java
More file actions
51 lines (45 loc) · 1.61 KB
/
20-表示数值的字符串.java
File metadata and controls
51 lines (45 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* Author: penglei
* Date: 2019-06-12
**/
/**
* 【题目描述】
* 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
* 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
* 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
*/
public class Solution {
private int index = 0; // 定义在小类之外,否则其他类找不到
public boolean isNumeric(char[] str) {
if (str == null) {
return false;
}
boolean numeric = scanInteger(str);
// 出现'.',接下来是小数部分
if (index < str.length && str[index] == '.') {
index++;
// 小数前面和后面都可以有数字,也可以前面没数字或者后面没数字
numeric = scanUnsignedInteger(str) || numeric;
}
// 出现'e'或者'E',接下里是指数部分
if (index < str.length && (str[index] == 'e' || str[index] == 'E')) {
index++;
// e前面和后面不能没有数字
numeric = numeric && scanInteger(str);
}
return numeric && index == str.length;
}
public boolean scanInteger(char[] str) {
if (index < str.length && (str[index]=='+'||str[index]=='-')) {
index++;
}
return scanUnsignedInteger(str);
}
public boolean scanUnsignedInteger(char[] str) {
int temp = index;
while (index < str.length && (str[index]>='0'&& str[index]<='9')) {
index++;
}
return temp<index;
}
}