题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100"
,"5e2"
,"-123"
,"3.1416"
和"-1E-16"
都表示数值。
但是"12e"
,"1a3.14"
,"1.2.3"
,"+-5"
和"12e+4.3"
都不是。
注意:
- 小数可以没有整数部分,例如.123等于0.123;
- 小数点后面可以没有数字,例如233.等于233.0;
- 小数点前面和后面可以有数字,例如233.666;
- 当e或E前面没有数字时,整个字符串不能表示数字,例如.e1、e1;
- 当e或E后面没有整数时,整个字符串不能表示数字,例如12e、12e+5.4;
样例
输入: "0"
输出: true
算法1
(别的题解) $O(不详)$
看别的题解!
时间复杂度 $O(不详)$
参考文献 无
Java 代码
class Solution {
public boolean isNumber(String s) {
int i=0;
while(i<s.length()&&s.charAt(i)==' ')i++;
int j=s.length()-1;
while(j>=0&&s.charAt(j)==' ')j--;
if(i>j)return false;
s=s.substring(i,j+1);
if(s.charAt(0)=='-'||s.charAt(0)=='+')s=s.substring(1);
if(s==""||s.charAt(0)=='.'&&s.length()==1)return false;
int dot=0,e=0;
for(int k=0;k<s.length();k++){
if(s.charAt(k)>='0'&&s.charAt(k)<='9');
else if(s.charAt(k)=='.'){
dot++;
if(e!=0||dot>1)return false;
}
else if(s.charAt(k)=='e'||s.charAt(k)=='E'){
e++;
if(k+1==s.length()||k==0||e>1||k==1&&s.charAt(0)=='.')return false;
if(s.charAt(k+1)=='+'||s.charAt(k+1)=='-'){
if(k+2==s.length())return false;
k++;
}
}
else return false;
}
return true;
}
}