leetcode 65.Valid Number

水题


题意:

判断一个字符串是不是合法的数字.


思路:

题目本身对算法要求不大,问题是细节处理多得惊人.

说一下什么是合法的数字:

整数:123, -123, +123

标准的浮点数:12.3, -12.3, +12.3

科学的浮点数(底数可以浮点数,指数只能整数):1e5, 1.5e5, 1.5e-5, -1.5e5

头疼的浮点数: .3 , 3. , +.3 , -3.


刚开始以为用自动机比较简单,后来发现还是暴力做简单.

先去两边空格,然后判断非法字符(数字,e,+,-,小数点合法).

字符都合法后,先找e,有e就分成左边标准浮点右边整数判断,没e直接当成标准浮点判断,有多个e直接非法.

标准浮点判断先找小数点,有多个就非法,没就当成整数判断.刚好一个就分成两边整数判断,但这里不是整数这么简单.右边整数不能带正负号,左边整数可以带,并且可以就一个正负号.两个整数都可以为空,但不能同时为空.

整数判断,头可以是正负号,后面全是数字即可.要特判字符串为空,和只有一个字符并且是正负号.


另外,正则表达式怎么做(笑脸)?这样?

^[\+\-]?(\d+(\.\d*)?|\d*\.\d)(e[\+\-]?\d+)?$


总结:

科学浮点数=标准浮点数+e+整数,标准浮点数=整数+小数点+整数,具体实现需要特判很多细节.


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值