python-leetcode-1694. 重新格式化电话号码

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

这个问题要求对电话号码进行重新格式化,按一定规则分块,并且确保输出满足特定的格式要求。下面是该问题的解法:

解题思路:

  1. 去除空格和破折号:首先需要删除输入字符串中的所有空格 ' ' 和破折号 '-'

  2. 分组规则

    • 如果剩余的数字数量大于4,则每3个数字一组。

    • 如果剩余的数字数量为4,则拆分成两个2个数字的块。

    • 如果剩余的数字为2,则拆分成一个2个数字的块。

    • 如果剩余的数字为3,则拆分成一个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. 输入: "1-23-45 6"

    • 去掉空格和破折号后,得到 "123456".

    • 3个一组分块得到 ["123", "456"],最终格式化为 "123-456".

  2. 输入: "123 4-567 890"

    • 去掉空格和破折号后,得到 "1234567890".

    • 3个一组分块得到 ["123", "456", "7890"],最终格式化为 "123-456-7890".

  3. 输入: "123 4-5678 90"

    • 去掉空格和破折号后,得到 "1234567890".

    • 3个一组分块得到 ["123", "45", "67"],最后剩下4个数字,按 ["89", "0"] 分块,最终格式化为 "123-45-67-890".

这个代码满足题目要求,能够正确格式化电话号码。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值