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

表示数值的字符串

作者: 囧略囧 | 来源:发表于2020-02-25 14:39 被阅读0次

题目描述

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

解法一:

通过观察我们发现,字符串为数值需满足以下几个条件:
1、可以包含E或e,也可以不包含E或e
2、若包含E或e,则只能出现一次,且不在字符串末尾
3、E或e前面的部分可以是整数也可以是小数,之后的部分只能是整数。
由此我们只需要判断字符串是否包含E或e,且前半部分是否是整数或小数,后半部分是否是小数即可。

public class Solution {
    public boolean isNumeric(char[] str) {
        int i = 0;
        for(i = 0; i < str.length; i++) {
            if(str[i] == 'E' || str[i] == 'e') {
                break;
            }
        }
        //E(或e)的位置不能为字符串末尾
        if(i == str.length - 1) {
            return false;
        }
        //字符串不含E或e
        else if(i == str.length) {
            return isNumber(str, 0, str.length - 1);
        }
        //字符串含E或e,且不在字符串末尾
        else {
            if(isNumber(str, 0, i - 1) && isNumber(str, i + 1, str.length - 1)) {
                if(isInt(str, i + 1, str.length - 1)) {
                    return true;
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
    }
    
    //判断是否是合法数字(整数或小数)
    public boolean isNumber(char[] str, int start, int end) {
        int pointCount = 0;
        for(int i = start; i <= end; i++) { if(str[i] >= '0' && str[i] <= '9') {
                continue;
            }
            if(str[i] == '.') {
                if(pointCount == 0) {
                    pointCount++;
                    continue;
                }
                else {
                    return false;
                }
            }
            else {
                //处理+-号问题
                boolean isSymbol = (i == start) && (str[i] == '+' || str[i] == '-');
                if(isSymbol) {
                    continue;
                }
                else {
                    return false;
                }
            }
        }
        return true;
    }
    //在已知为合法数字的基础上判断是否是整数
    public boolean isInt(char[] str, int start, int end) {
        for(int i = start; i <= end; i++) { 
            if(str[i] == '.') {
                return false;
            }
        }
        return true;
    }
}
解法二:

表示字符的字符串遵循模式:
A[.[B]][e|EC],如100、1.2、1.2e、1.2E+4
或.B[e|EC],如.2、.3e-2
其中A和C表示整数(可以有符号)、B表示无符号整数。
于是对于一个字符串,我们可以先判断其开头是否为A部分,判断之后是否为小数点,若有小数点之后是否为B部分,之后是否为e|E,若为e|E之后是否为C部分。

public class Solution {
    public boolean isNumeric(char[] str) {
        int index = scanInteger(str, 0);
        if((index < str.length) && (str[index] == '.')) {
            index = scanUnsignedInteger(str, index + 1);
        }
        boolean isE = (index < str.length - 1) && (str[index] == 'E' || str[index] == 'e');
        if(isE) {
            index = scanInteger(str, index + 1);
        }
        if(index == str.length) {
            return true;
        }
        else {
            return false;
        }
    }
    /**判断是否为A或C部分*/
    public int scanInteger(char[] str, int start) {
        int end = start;
        boolean isSymbol = (end < str.length) && (str[end] == '+' || str[end] == '-');
        if(isSymbol) {
             end++;
        }
        return scanUnsignedInteger(str, end);
    }
    /**判断是否为B部分*/
    public int scanUnsignedInteger(char[] str, int start) {
        int end = start;
        while((end < str.length) && (str[end] >= '0' && str[end] <= '9')) {
            end++;
        }
        return end;
    }
}

相关文章

  • 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/qtcvqctx.html