1.题目
剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。
经测验,5.0f,d,D等浮点数表示也不是
数字前后可能有空格
3.算数字
2.自我思路及实现
我们学习下其他人是怎么实现的吧!
3.总结思路及实现
1.标记+逐个遍历
设定三个标记表示数字、点、E正确地出现了
数字地正确存在为:是个数字
.的正确存在为:之前没有点且没有e
E的正确存在为:之前没有e且出现过数字,之后有数字
±的正确存在为:出现在开头或者前一位是e
时间:N
空间:1
class Solution {
public boolean isNumber(String s) {
if(s == null || s.length() == 0)
return false;
//处理开头结尾空格
s = s.trim();
//标记
boolean numFlag = false;
boolean dotFlag = false;
boolean eFlag = false;
for(int i = 0; i < s.length(); i++)
{
//判定为数字
if(Character.isDigit(s.charAt(i)))
numFlag = true;
//判定为.,之前没有点且没有e
else if(s.charAt(i) == '.' && !dotFlag && !eFlag)
dotFlag = true;
//判定为e,之前没有e且出现过数字,之后有数字
else if((s.charAt(i) == 'e' || s.charAt(i) == 'E') && !eFlag && numFlag)
{
eFlag = true;
numFlag = false;
}
//判定为+-,在字符串开头或者前一个是e
else if((s