解题思路-leetcode第六十五题:有效数字

解题思路-leetcode第六十五题:有效数字

题目描述:
验证给定的字符串是否可以解释为十进制数字。
例如:
“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”
正/负号 - “+”/"-"
小数点 - “.”
当然,在输入中,这些字符的上下文也很重要。

解题思路:本题采用循环遍历字符串,然后分类判断的方法,通过设置4个标记来判断当前字符串是否有效,4个标记分别问,数字标记num,点标记dot,e标记e,e后是否有数字标记e_after,循环内分四种情况,当遍历字符为数字时,则将num,e_after置为true,当遍历正负号时,首先判断,正负号位置以及正负号前是否为e,若位置不处于开头且前一位不为e,则此字符串无效。当遍历小数点时,若之前出现过小数点或者之前出现过e,则字符串无效,当遍历到e时,若之前出现过e或者之前不是数字,则字符串无效,最后,若出现其余字符,则字符串无效。最后返回数字标记num与e后是否有数字标记e_after的and值。代码如下:
class Solution:
    def isNumber(self, s: str) -> bool:
        s = s.strip() 
        num, dot, e, e_after = False, False, False, False  
        for i in range(len(s)):
            if s[i] in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'):
                num = True
                e_after = True
            elif s[i] == '.':
                if dot or e:
                    return False
                dot = True
            elif s[i] in ('+', '-'):
                if i > 0 and s[i-1] != 'e':
                    return False
            elif s[i] == 'e':
                if e or not num:
                    return False
                e = True
                num = False
            else:
                return False  
        return num and e_after

提交后,通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值