• leetcode刷题笔记六十五 有效数字


    leetcode刷题笔记六十五 有效数字

    源地址:65. 有效数字

    问题描述:

    验证给定的字符串是否可以解释为十进制数字。

    例如:

    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true
    " -90e3 " => true
    " 1e" => false
    "e3" => false
    " 6e-1" => true
    " 99e2.5 " => false
    "53.5e93" => true
    " --6 " => false
    "-+3" => false
    "95a54e53" => false

    说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。这里给出一份可能存在于有效十进制数字中的字符列表:

    数字 0-9
    指数 - "e"
    正/负号 - "+"/"-"
    小数点 - "."
    当然,在输入中,这些字符的上下文也很重要。

    代码补充:

    /**
    本题较为繁杂,主要是针对错误选项要进行一一排查
    */
    object Solution {
        def isNumber(s: String): Boolean = {
            s match {
                //排除空格及空字符串
                case s if Option(s) == None => false
                case s if s.trim.length == 0 => false
    			
                //判断字符串具体情况
                case s => {
                    //将字符串左右侧的空格去除
                    val str = s.trim
                    /**
                    digit : 标记目前已检索数字情况
                    dot   : 标记目前已检索小数点情况
                    sign  : 标记目前已检索符号情况
                    e	  : 标记目前已检索指数情况
                    */
                    var digit = false
                    var dot = false
                    var sign = false
                    var e = false
    
                    for(c <- str){
                        //空串
                        if(c == ' ') return false
                        //排除"*E*E" 及 E之前底数
                        if(c == 'e' && (e == true || digit == false)) return false
                        //排除".*."及"e*."
                        if(c == '.' && (dot == true || e == true)) return false
                        //排除"+|-"出现在
                        if((c == '+' || c == '-') && (sign == true || digit == true || dot == true))  return false
                        //出现数字 认为已放置数字
                        if(c >= '0' && c <= '9') digit = true
                        //出现符号,认为已放置符号
                        else if (c == '+' || c == '-') sign = true
                        //出现小数点,认为已放置小数点
                        else if (c == '.') dot = true
                        //底数确定,判断指数
                        else if (c == 'e') {
                            e = true
                            digit = false
                            dot = false
                            sign = false
                        }
                        else return false
                    }
                    //底数确定,指数错误
                    if (e == true && digit == false) return false
                return digit
                }
            }
        }
    }
    
  • 相关阅读:
    oracle 下创建数据实例
    MyEclipse7.02注册码
    liferay 5.1学习遇到的错误
    详解struts2中struts.properties
    cas部署到linux登陆也出现异常
    java 字符串和输入流互转
    ASP 的Base64加密 与ASP MD5加密
    Struts2直接下载从数据中的blob类型字段( Struts2.0下载文件流)
    java 汉字转拼音
    java调shell,可以输入参数
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13306520.html
Copyright © 2020-2023  润新知