《剑指offer》刷题——【高质量的代码】面试题20:表示数值的字符串(java实现)

《剑指offer》刷题——【高质量的代码】面试题面试题20:表示数值的字符串(java实现)

一、题目描述

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

二、题目分析

  • 数值的格式:A[.[B]][e/EC] 或者 .B[e/EC]

    • A:数值的整数部分
    • B:紧跟着小数点后的小数部分
    • C:紧跟着 e/E的指数部分
    • A和C都可能是以“+”或者“-”开头的0~9;B是 0 ~9
  • 判断步骤:

    • 扫描整数A部分;
    • 遇到小数点‘.’,开始扫描小数B部分
    • 遇到‘e’ ‘E’,开始扫描指数C部分

三、代码实现

public class Solution {
    private int index = 0; //字符数组指针
    
    /**
    * 判断字符串是否表示数字
    */
    public boolean isNumeric(char[] str) {
        
        //字符串判空
        if(str.length < 1){
            return false;
        }
        
        //扫描整数部分
        boolean isNum = scanInteger(str);
        
        //扫描小数部分
        if(index<str.length && str[index]=='.'){
            index++;
            //小数可以没有整数部分
            //小数点后边可以没有数字
            //也可以小数点前后都有
            isNum = scanUnsignedInteger(str) || isNum;
        }
        
        //扫描指数部分
        if(index<str.length && (str[index]=='e'||str[index]=='E')){
            index++;
            //当e前无数字,不能表示数字
            //当e后无数字,不能表示数字
            isNum = isNum && scanInteger(str);
        }
        return (isNum && index==str.length);
    }
    
   
    /**
    *扫描带正负号的0~9
    */
    boolean scanInteger(char[] str){
        if(index<str.length && (str[index]=='+'||str[index]=='-')){
            index++;
        }
        return scanUnsignedInteger(str);
    }
    
     /**
    *扫描字符串中0~9
    */
    boolean scanUnsignedInteger(char[] str){
        int start = index; //记录开始索引
        while(index<str.length && str[index]>='0' && str[index]<='9'){
            index++;
        }
        //当存在若干0~9,则返回true
        return start<index;
    }
    
    
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值