1694. 重新格式化电话号码 - 力扣(LeetCode)



这个问题要求对电话号码进行重新格式化,按一定规则分块,并且确保输出满足特定的格式要求。下面是该问题的解法:
解题思路:
-
去除空格和破折号:首先需要删除输入字符串中的所有空格
' '和破折号'-'。 -
分组规则:
-
如果剩余的数字数量大于4,则每3个数字一组。
-
如果剩余的数字数量为4,则拆分成两个2个数字的块。
-
如果剩余的数字为2,则拆分成一个2个数字的块。
-
如果剩余的数字为3,则拆分成一个3个数字的块。
-
-
拼接块:最终通过
'-'连接所有的块。
代码实现:
def reformatNumber(number: str) -> str:
# 去除空格和破折号
number = number.replace(" ", "").replace("-", "")
# 存储格式化后的块
parts = []
# 处理剩余数字,按3个一组分块
while len(number) > 4:
parts.append(number[:3])
number = number[3:]
# 处理剩下的最后4个数字,按2个或3个数字块分组
if len(number) == 4:
parts.append(number[:2])
parts.append(number[2:])
else:
parts.append(number)
# 用破折号连接所有块
return "-".join(parts)
例子:
print(reformatNumber("1-23-45 6")) # 输出 "123-456"
print(reformatNumber("123 4-567 890")) # 输出 "123-456-7890"
print(reformatNumber("123 4-5678 90")) # 输出 "123-45-67-890"
解释:
-
输入:
"1-23-45 6"-
去掉空格和破折号后,得到
"123456". -
3个一组分块得到
["123", "456"],最终格式化为"123-456".
-
-
输入:
"123 4-567 890"-
去掉空格和破折号后,得到
"1234567890". -
3个一组分块得到
["123", "456", "7890"],最终格式化为"123-456-7890".
-
-
输入:
"123 4-5678 90"-
去掉空格和破折号后,得到
"1234567890". -
3个一组分块得到
["123", "45", "67"],最后剩下4个数字,按["89", "0"]分块,最终格式化为"123-45-67-890".
-
这个代码满足题目要求,能够正确格式化电话号码。
416

被折叠的 条评论
为什么被折叠?



