# 有效数字

有效数字(按顺序)可以分成以下几个部分:

  1. 一个 小数 或者 整数
  2. (可选)一个 'e''E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+''-'
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 '.'
    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+''-'
  2. 至少一位数字

部分有效数字列举如下:

部分无效数字列举如下:

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true

 

示例 1:

输入:s = "0"
输出:
true

示例 2:

输入:s = "e"
输出:
false

示例 3:

输入:s = "."
输出:
false

示例 4:

输入:s = ".1"
输出:
true

 

提示:

以下程序实现了这一功能,请你填补空白处内容: ```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; } ```