美文网首页
表示数值的字符串

表示数值的字符串

作者: 凯玲之恋 | 来源:发表于2020-09-20 09:20 被阅读0次

题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
核心: 1) 使用索引之前先检查索引是否越界 2)有效数字只有两种模式:A[.[B]][[e|EC]; .B[e|EC]

/*
核心: 有效数字的模式有两种:1)A[.[B]][e|EC]  2).B[e|EC]; 其中,A、C是整数,B是正整数
有A的话,有没有B都可以
没有A的话, 必须有B
*/
class Solution {
    //扫描字符串时的索引
    int i=0;
    public boolean isNumber(String s) {
        //input check
        if(s==null || s.length()==0)
            return false;
        //去掉首尾的空字符
        s = s.trim();
        boolean A = scanInteger(s), B=false, C=false;
        //判断是否有B; 使用索引时要确保索引不越界
        if(i<s.length() && s.charAt(i)=='.'){
            i++;
            B = scanUnsignedInteger(s);
        }
        //判断是否有C
        if(i<s.length() && (s.charAt(i)=='e' || s.charAt(i)=='E')){
            i++;
            C = scanInteger(s);
            //如果存在e|E, 但是没有C, 说明不是数字
            if(C==false)
                return false;
        }
        //here, 说明C是合格的, 只需判断A和B的情况
        //i必须扫描完整个字符串 && (A合格则B合不合格都可以, A不合格则B必须合格)
        return i==s.length() && (A || B);
        
    }
    private boolean scanInteger(String s){
        if(i<s.length() && (s.charAt(i)=='+' || s.charAt(i)=='-'))
            i++;
        return scanUnsignedInteger(s);
    }
    private boolean scanUnsignedInteger(String s){
        //起始索引
        int start = i;
        while(i<s.length() && s.charAt(i)>='0' && s.charAt(i)<='9'){
            i++;
        }
        //i>start说明扫描到了数字; 
        //i<=start说明没有扫描到数字, 此种情况说明要么start越界, 要么s.charAt(start)不是数字
        return i > start;
    }
}

参考

剑指offer面试题20(java版):表示数值的字符串

相关文章

  • JZ-053-表示数值的字符串

    表示数值的字符串 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",...

  • LeetCode 每日一题 [52] 表示数值的字符串

    LeetCode 表示数值的字符串 [中等] 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字...

  • 算法实现

    题1:表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e...

  • Java小技巧

    1. 数值转字符串 使用空字符串连接数值会变成字符串 2. 数值太长友好表示 使用_分割数值,值不变 3.随机字符...

  • 《剑指 Offer (第 2 版)》第 20 题:表示数值的字符

    第 20 题:表示数值的字符串 传送门: 表示数值的字符串,牛客网 online judge 地址。 请实现一个函...

  • 实现一个函数判断字符串是否表示数值(包括整数和小数)

    实现一个函数判断字符串是否表示数值(包括整数和小数),例如,字符串'+100','5e2','-123'都表示数值...

  • 面试题20:表示数值的字符串

    题目:请实现一个函数用于判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100“、”5e2“都表示数值,...

  • 表示数值的字符串

    题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-12...

  • 表示数值的字符串

    题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-12...

  • 表示数值的字符串

    题目描述   请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","...

网友评论

      本文标题:表示数值的字符串

      本文链接:https://www.haomeiwen.com/subject/nhxyyktx.html