首页
学习
活动
专区
圈层
工具
发布

每天一道剑指offer-表示数值的字符串

考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰

题目

每天一道剑指offer-表示数值的字符串 https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目详述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

题目详解

思路

  • 把所有情况考虑一遍

代码

代码语言:javascript
复制
public class Solution {
    public boolean isNumeric(char[] str) {
        int index = 0;
        if(str.length == 0)
            return false;
        if(str.length == 1 && (str[0] == '+' || str[0] == '-'))
            return false;//只有一个正负号
        if(str[0] == '+' || str[0] == '-')
            index++;//跳过最开始的字符
        index = judgeDigits(str,index);//跳过前面的数字
        if(index == str.length)
            return true;//如果正好遍历完,发现是到了字符串的长度,那么返回true。
        if(str[index] == '.')
        {//跳过数字以后,发现是个小数点
            index++;//然后跳过小数点
            if(index == str.length)
                return false;//说明是1123. 这就不是合法数字
            index = judgeDigits(str,index);//跳过接下来的所有数字
            if(index == str.length)
                return true;//如果恰好对于字符数组的长度,说明是123.432是规范数字
            if(str[index] == 'e' || str[index] == 'E')
            {//说明是1.4e10 这样类型的数字
                index++;//把e跳过去
                return judgeE(str,index);//判断是不是规范的带e的数字
            }
            return false;//返回假
        }else if(str[index] == 'e' || str[index] == 'E')
        {//说明可能是12e13 这样类型的数字
            index++;//把e跳过去
            return judgeE(str,index);//判断是不是规范的带e的数字
        }
        return false;
    }
    private boolean judgeE(char[] str,int index)
    {
        if(index >= str.length)
            return false;
        if(str[index] == '+' || str[index] == '-')
            index++;//如果是符号则跳过 12e+12 这种可惜的数字
        if(index >= str.length)
            return false;//如果刚跳过e就到了字符串末尾 是12e就是不规范的
        index = judgeDigits(str,index);//跳过全部的数字
        if(index == str.length)//说明是12e23这样的数字是规范的
            return true;
        return false;
    }
    private int judgeDigits(char[] str,int index)
    {
        while(index < str.length)
        {//判断是不是在0-9之间,不是的话就break返回index下标值
            int number = str[index] - '0';
            if(number <= 9 && number >= 0)
                index++;
            else{
                break;
            }
        }
        return index;
    }
}

下一篇
举报
领券