0
点赞
收藏
分享

微信扫一扫

【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串


【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串


文章目录

  • 【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串
  • 题目描述
  • 题解


题目描述

【暴力解法,究极绕逻辑版】剑指 Offer 20. 表示数值的字符串_i++

正确示例:

  • 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;
    }
}


举报

相关推荐

0 条评论