1694. 重新格式化电话号码:简单模拟

简介: 这是 力扣上的 1694. 重新格式化电话号码,难度为 简单。

题目描述

这是 力扣上的 1694. 重新格式化电话号码,难度为 简单

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

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

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

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

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

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

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

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

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

image.png

image.png

题目分析

看了题目,很明确是一个字符串类型的题目

继续看示例,我们其实基本上就有思路了,我们可以按照题目给出的思路来进行模拟

  • 第一步去除空格和破折号,抽出数字出来
  • 第二步,判断数字个数是否是大于 4 个的,如果是则,进行 3 个 3 个的分,如果不是,则按照题目逻辑进行模拟
  • 最终在每个分割的点上加上破折号即可

有思路进行模拟了,那么我们编码的时候需要如何去实现呢?

例如我一般是喜欢使用 golang 来进行刷题,如果是使用 C 来进行刷题的话,稍微涉及到字符串,结构体,指针等的内容就麻烦的一匹

不过编码的实现上,方法大体一致:

  • 替换指定的字符串,golang 中可以使用 strings 包中的 replece
  • C 的话,暂时没现成的函数,咱们就换成提取 数字即可,姑且就令这个 数字数组为 digital 吧
  • 根据数字的长度来进行分割,并在分割点上面加上破折号, golang 的话,直接使用字符串切片的方式,满足条件就加入切片,最终使用 strings 包的 Join 函数即可将切片中的元素连接起来
  • 使用 C 语言的话就稍微麻烦一点,咱们需要开辟足够多的空间,例如数字的个数为 n,那么我们就开辟 2*n个字节的空间,因此咱们输出的结果是一个字符串,此处的一个字符是占一个字节的,然后在使用 strcopy 的方式,按照逻辑从 digital 中拷贝指定个数的数字到咱们的结果字符串中,并加上破折号即可

Golang 版本的实现相对简单

func reformatNumber(number string) string {
    // 替换字符
    s := strings.ReplaceAll(number, " ", "")
    s = strings.ReplaceAll(s, "-", "")
    ans := []string{}
    i := 0
    // 数字加入到 字符串切片中
    for ; i+4 < len(s); i += 3 {
        ans = append(ans, s[i:i+3])
    }
    // 处理剩余的数字
    s = s[i:]
    if len(s) < 4 {
        ans = append(ans, s)
    } else {
        ans = append(ans, s[:2], s[2:])
    }
    return strings.Join(ans, "-")
}

C 语言版本的实现相对稍微麻烦一点

image.png

本题时间复杂度和空间复杂度都是 O(n)

今天就到这里,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
|
11月前
截取字符串的方法(实例:从身份证中截取生日)
截取字符串的方法(实例:从身份证中截取生日)
65 0
|
2月前
|
开发者
|
3月前
|
JavaScript 计算机视觉
js身份证号输入自动判断其性别和出生年月日呢?进来来来来
js身份证号输入自动判断其性别和出生年月日呢?进来来来来
|
3月前
leetcode-1694:重新格式化电话号码
leetcode-1694:重新格式化电话号码
33 0
|
3月前
|
SQL
查找重复的电子邮箱
查找重复的电子邮箱
33 0
|
算法
改错题:用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegal month”。 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
改错题:用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegal month”。 注意: (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
295 0
LeetCode每日一题——1694. 重新格式化电话号码
给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。 请你按下述方式重新格式化电话号码。
78 0
7-48 字符串输入练习 (I) (15 分)
7-48 字符串输入练习 (I) (15 分)
135 0