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
            }
        }
    }
}
posted @ 2020-07-15 16:56  ganshuoos  阅读(130)  评论(0编辑  收藏  举报