# 有效数字
有效数字(按顺序)可以分成以下几个部分:
- 一个 小数 或者 整数
- (可选)一个
'e'
或 'E'
,后面跟着一个 整数
小数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符(
'+'
或 '-'
) - 下述格式之一:
- 至少一位数字,后面跟着一个点
'.'
- 至少一位数字,后面跟着一个点
'.'
,后面再跟着至少一位数字 - 一个点
'.'
,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符(
'+'
或 '-'
) - 至少一位数字
部分有效数字列举如下:
["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:
["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s
,如果 s
是一个 有效数字 ,请返回 true
。
示例 1:
输入:s = "0"
输出:true
示例 2:
输入:s = "e"
输出:false
示例 3:
输入:s = "."
输出:false
示例 4:
输入:s = ".1"
输出:true
提示:
1 <= s.length <= 20
s
仅含英文字母(大写和小写),数字(0-9
),加号 '+'
,减号 '-'
,或者点 '.'
。
以下程序实现了这一功能,请你填补空白处内容:
```java
class Solution {
char[] chars;
boolean point = false;
boolean exponent = false;
public boolean isNumber(String s) {
s = s.trim();
int length = s.length();
if (length == 0) {
return false;
}
chars = s.toCharArray();
String[] ss = s.split("e");
if (ss.length == 0) {
return false;
}
if (ss[0].length() == 0)
return false;
if (ss[0].length() < length)
exponent = true;
if (ss[0].length() == length - 1) {
return false;
}
String[] pre = ss[0].split("\\.");
if (pre.length == 0) {
return false;
}
if (pre[0].length() < ss[0].length())
point = true;
boolean result = pre(0, pre[0].length());
result = result && middle(pre[0].length() + 1, ss[0].length());
if (exponent) {
result = result && is(ss[0].length() + 1, length);
}
return result;
}
____________________________;
public boolean middle(int i, int length) {
if (i >= length && point) {
if (chars[i - 2] >= '0' && chars[i - 2] <= '9') {
return true;
}
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
public boolean is(int i, int length) {
if (i == 1) {
return false;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length) {
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
}
```
## template
```java
class Solution {
char[] chars;
boolean point = false;
boolean exponent = false;
public boolean isNumber(String s) {
s = s.trim();
int length = s.length();
if (length == 0) {
return false;
}
chars = s.toCharArray();
String[] ss = s.split("e");
if (ss.length == 0) {
return false;
}
if (ss[0].length() == 0)
return false;
if (ss[0].length() < length)
exponent = true;
if (ss[0].length() == length - 1) {
return false;
}
String[] pre = ss[0].split("\\.");
if (pre.length == 0) {
return false;
}
if (pre[0].length() < ss[0].length())
point = true;
boolean result = pre(0, pre[0].length());
result = result && middle(pre[0].length() + 1, ss[0].length());
if (exponent) {
result = result && is(ss[0].length() + 1, length);
}
return result;
}
public boolean pre(int i, int length) {
if (i >= length) {
return true;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length && !point) {
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
public boolean middle(int i, int length) {
if (i >= length && point) {
if (chars[i - 2] >= '0' && chars[i - 2] <= '9') {
return true;
}
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
public boolean is(int i, int length) {
if (i == 1) {
return false;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length) {
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
}
```
## 答案
```java
public boolean pre(int i, int length) {
if (i >= length) {
return true;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length && !point) {
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
```
## 选项
### A
```java
public boolean pre(int i, int length) {
if (i >= length) {
return true;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length && !point) {
return false;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return true;
}
}
return false;
}
```
### B
```java
public boolean pre(int i, int length) {
if (i >= length) {
return false;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length && !point) {
return true;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return true;
}
}
return false;
}
```
### C
```java
public boolean pre(int i, int length) {
if (i >= length) {
return false;
}
if (chars[i] == '+' || chars[i] == '-') {
i++;
}
if (i == length && !point) {
return true;
}
for (; i < length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
```