📅  最后修改于: 2023-12-03 15:12:38.903000             🧑  作者: Mango
给定一个字符串,判断它是否是一个合法的十进制数。
一行字符串,长度不超过100。
如果字符串是一个合法的十进制数,输出 Valid
;否则,输出 Invalid
。
123.45
Invalid
0.1024
Valid
十进制数的格式一般为 [整数部分].[小数部分]
的形式,其中小数部分可以省略。
因此,我们只需要分别判断整数部分和小数部分是否合法即可。
判断整数部分是否合法需要满足以下条件:
-
开头,那么 -
的后面必须包含至少一位数字;+
开头,那么 +
的后面必须包含至少一位数字;+
也不以 -
开头,那么它必须以至少一位数字开头。判断小数部分是否合法也需要满足以下条件:
.
,那么小数点前面和后面必须分别是一个合法的整数;+
或 -
,那么它们必须是第一位,并且后面必须有至少一位数字。def is_valid_decimal(s: str) -> str:
# 先将字符串按小数点分成整数部分和小数部分
int_part, decimal_part = s.split('.', maxsplit=1) if '.' in s else (s, '')
# 判断整数部分是否合法
if len(int_part) == 0: # 整数部分不能为空
return 'Invalid'
elif int_part[0] in ('+', '-'): # 如果存在符号,判断后面必须有数字
if len(int_part) == 1 or not int_part[1:].isdigit():
return 'Invalid'
elif not int_part.isdigit(): # 如果不存在符号,整数部分必须是合法数字
return 'Invalid'
# 判断小数部分是否合法
if len(decimal_part) == 0:
return 'Valid'
elif not decimal_part.isdigit() or len(decimal_part) == 0: # 小数部分必须是合法数字
return 'Invalid'
elif decimal_part[0] in ('+', '-') and len(decimal_part) == 1: # 符号后面必须有数字
return 'Invalid'
else:
return 'Valid'
由于字符串的长度不超过100,因此算法的时间复杂度为 $O(1)$。