• 【leetCode:剑指 Offer】20. 表示数值的字符串


    1.题目描述

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

    数值(按顺序)可以分成以下几个部分:

    若干空格
    一个 小数 或者 整数
    (可选)一个 'e' 或 'E' ,后面跟着一个 整数
    若干空格
    小数(按顺序)可以分成以下几个部分:

    (可选)一个符号字符('+' 或 '-')
    下述格式之一:
    至少一位数字,后面跟着一个点 '.'
    至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    一个点 '.' ,后面跟着至少一位数字
    整数(按顺序)可以分成以下几个部分:

    (可选)一个符号字符('+' 或 '-')
    至少一位数字
    部分数值列举如下:

    ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
    部分非数值列举如下:

    ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

    2.算法分析

    1. 若干空格
    2. 一个 小数 或者 整数
    3. (可选)一个 'e' 或 'E' ,后面跟着一个 整数
    4. 若干空格

    小数:

    (可选)一个符号字符('+' 或 '-')
    下述格式之一:
    至少一位数字,后面跟着一个点 '.'
    至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    一个点 '.' ,后面跟着至少一位数字

    整数:

    (可选)一个符号字符('+' 或 '-'

       至少一位数字

    分析:

    ①数值,首尾若干空格,那就先去掉空格

    ②数值,包括小数,整数。

    小数小数只有一个点,这个点前面有数字,或者点后面有数字

     'e' 或 'E' ,后面跟着一个 整数

    ⑤ ' + ',' - ',不能挨着,只是符号 

    总结:

    ① 对每一个字符进行判断,按情况来

    ②是数值

    ③是小数点

    ④e E的判断

    3.Java代码实现

    1. class Solution {
    2. public boolean isNumber(String s) {
    3. if(s == null || s.length() == 0){
    4. return false;
    5. }
    6. // 遍历每一个字符,对当前字符进行判断,以及前一个字符以及后一个字符
    7. boolean isNum = false,isDot = false,ise_or_E = false;
    8. char[] str = s.trim().toCharArray();
    9. for(int i = 0;i < str.length;i++){
    10. //判断当前是否是0-9的数位
    11. if(str[i] >= '0' && str[i] <= '9'){
    12. // 是数值
    13. isNum = true;
    14. }else if(str[i] == '.'){
    15. // 如果之前有小数点了,或者E,e,那么返回false
    16. if(isDot || ise_or_E){
    17. return false;
    18. }
    19. // 设置状态
    20. isDot = true;
    21. }else if(str[i] == 'e' || str[i] == 'E'){
    22. if(!isNum || ise_or_E){
    23. return false;
    24. }
    25. ise_or_E = true;
    26. isNum = false;
    27. }else if(str[i] == '-' || str[i] == '+'){
    28. // 看E,e的情况。
    29. if(i!=0 && str[i - 1] != 'e' && str[i - 1] != 'E'){
    30. return false;
    31. }
    32. }else {
    33. return false;
    34. }
    35. }
    36. return isNum;
    37. }
    38. }

  • 相关阅读:
    【构建并发程序】8-并发队列之阻塞队列
    切面Aspect + 策略模式实现待办提醒功能
    怎么样的框架对于开发者是友好的?
    SpringBoot 异步接口
    国庆作业day6
    HTML5期末考核大作业 基于HTML+CSS+JavaScript仿王者荣耀首页 游戏网站开发 游戏官网设计与实现
    【openwrt学习笔记】新patch的制作和旧patch的修改
    R可视化:plot函数基础操作,小白教程
    R语言使用cut函数进行数据分组(binning):根据指定间隔(breaks)将数据拆分为组、设置labels参数指定分组的标签
    springboot同城流浪动物救助与收养网站
  • 原文地址:https://blog.csdn.net/Sunshineoe/article/details/130904133