【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串
文章目录
- 【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串
- 题目描述
- 题解
题目描述
正确示例:
- 2.e+12
- 2.e12
- 46.e3
- -1e-12
- -1E-16
- 2.32
注意:e\E后面可以跟+、-;小数点后面可以紧跟e\E,而且一个字符串中最多有一个e\E,且小数点必须在e\E的前面
题解
class Solution
{
public boolean isNumber(String s)
{
s = s.strip();
if (s.length()==0)
{
return false;
}
int flag = 0, i = 0, c = 0;
if (s.charAt(i) == '-' || s.charAt(i) == '+')
{
i++;
}
if (s.charAt(i) == '.')
{
if (i + 1 >= s.length() || !isNum(s.charAt(i + 1)))
{
return false;
}
else
{
i++;
flag = -1;
}
}
else
{
if (!isNum(s.charAt(i)))
{
return false;
}
}
for (; i < s.length(); i++)
{
if (!isNum(s.charAt(i)))
{
if (s.charAt(i) == '.' && flag == 0)
{
flag = -1;
if (i + 1 >= s.length())
{
return true;
}
else
{
int j=i+1;
if (s.charAt(j)=='e'||s.charAt(j)=='E'&&c==0)
{
flag=1;
if (j+1<s.length()&&isNum(s.charAt(j+1)))
{
i+=2;
System.out.println(0);
System.out.println(s.charAt(i));
}
else if (j+2<s.length()&&(s.charAt(j+1)=='+'||s.charAt(j+1)=='-')&&isNum(s.charAt(j+2)))
{
i=+4;
System.out.println(1);
System.out.println(s.charAt(i));
}
else
{
System.out.println(2);
return false;
}
c++;
}
else if (isNum(s.charAt(i+1)))
{
}
else
{
return false;
}
// if (!isNum(s.charAt(i+1)))
// {
// System.out.println(3);
// return false;
// }
}
}
else if ((s.charAt(i) == 'e' || s.charAt(i) == 'E')&&c==0)
{
flag = 1;
if (i+1<s.length()&&isNum(s.charAt(i+1)))
{
System.out.println(4);
}
else if (i+2<s.length()&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-')&&isNum(s.charAt(i+2)))
{
i++;
System.out.println(5);
}
else
{
System.out.println(6);
return false;
}
c++;
}
else
{
System.out.println(7);
return false;
}
}
}
return true;
}
public boolean isNum(char c)
{
if (c <= '9' && c >= '0')
{
return true;
}
return false;
}
}