LeetCode每日一题——1694. 重新格式化电话号码

简介: 给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。请你按下述方式重新格式化电话号码。

题目

给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。

请你按下述方式重新格式化电话号码。

首先,删除 所有的空格和破折号。

其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:

2 个数字:单个含 2 个数字的块。

3 个数字:单个含 3 个数字的块。

4 个数字:两个分别含 2 个数字的块。

最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。

返回格式化后的电话号码。

示例

示例 1:

输入:number = “1-23-45 6”

输出:“123-456”

解释:数字是 “123456”

步骤 1:共有超过 4个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。 步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 “456” 。 连接这些块后得到 “123-456” 。

示例 2:

输入:number = “123 4-567”

输出:“123-45-67”

解释:数字是 “1234567”.

步骤 1:共有超过 4个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。 步骤 2:剩下 4 个数字,所以将它们分成两个含 2 个数字的块。这2 块分别是 “45” 和 “67” 。 连接这些块后得到 “123-45-67” 。

示例 3:

输入:number = “123 4-5678”

输出:“123-456-78”

解释:数字是 “12345678” 。

步骤 1:第 1个块 “123” 。 步骤 2:第 2 个块 “456” 。 步骤 3:剩下 2 个数字,将它们放入单个含 2 个数字的块。第 3 个块是"78" 。 连接这些块后得到 “123-456-78” 。

示例 4:

输入:number = “12”

输出:“12”

示例 5:

输入:number = "–17-5 229 35-39475 "

输出:“175-229-353-94-75”

提示:

2 <= number.length <= 100

number 由数字和字符 ‘-’ 及 ’ ’ 组成。

number 中至少含 2 个数字。

思路

先使用re将不需要的字符替换掉,再分情况统计即可。

题解

import re
class Solution:
    def reformatNumber(self, number: str) -> str:
        number = re.sub('-| ', '', number)
        index = 0
        tmp =[]
        while index < len(number):
            # 如果最后剩四个元素,两两加入列表
            if index + 4 == len(number):
                tmp.append(number[index:-2])
                tmp.append(number[-2:])
                index += 4
            # 加入列表三个元素
            elif index + 3 < len(number):
                tmp.append(number[index:index+3])
                index += 3
            # 加入列表两个元素
            else:
                tmp.append(number[index:])
                index = len(number)
        # 使用-拼接列表中的元素即可
        return '-'.join(tmp)
目录
相关文章
|
4月前
|
Go
golang力扣leetcode 17.电话号码的字母组合
golang力扣leetcode 17.电话号码的字母组合
39 0
|
11月前
【Leetcode -461.汉明距离 -482.密钥格式化】
【Leetcode -461.汉明距离 -482.密钥格式化】
40 0
|
27天前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
11月前
|
算法
代码随想录Day21 回溯 LeetCodeT216 组合总和III LeetCode T17电话号码的字母总和
代码随想录Day21 回溯 LeetCodeT216 组合总和III LeetCode T17电话号码的字母总和
45 0
|
3月前
|
存储 算法 数据挖掘
leetcode第十七题:解密电话号码的字母组合与应用【python】
leetcode第十七题:解密电话号码的字母组合与应用【python】
|
存储 算法 C语言
【DFS】LeetCode 17. 电话号码的字母组合
看第一个示例:输入"23",其对应的是"abc"与"de".根据全排列的特点,我们先把它们按层状结构写开,之后依次排列组合即可
69 0
|
4月前
|
Java
LeetCode-电话号码的字母组合-Java
电话号码的字母组合-Java
24 0
|
4月前
|
Java
leetcode-17:电话号码的字母组合
leetcode-17:电话号码的字母组合
25 0
leetcode-17:电话号码的字母组合
|
4月前
leetcode-1694:重新格式化电话号码
leetcode-1694:重新格式化电话号码
36 0
|
10月前
|
算法
代码随想录算法训练营第二十五天 | LeetCode 216. 组合总和 III、17. 电话号码的字母组合
代码随想录算法训练营第二十五天 | LeetCode 216. 组合总和 III、17. 电话号码的字母组合
47 0