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

好了,本次就到这里

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

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



相关文章
方法:怎么快速把excel表格里电话号码导入手机通讯录?
第I步:打开电脑软件:金芝号码提取导入助手。你把excel表格打开,复制里面的号码和人铭,分别粘贴到软件上。第II步:点击软件下方的“转成通讯录”,就可以转换出来一个文件。你从电脑上把这个文件,发给你的手机,在手机上打开这个文件,就可以快速把excel表格里号码导入通讯录。第III步:怎么把电脑上的文件发给你手机,这个不用我教吧。电脑某信电脑q,发给你的手机某信手机q,不就可以了吗?
方法:怎么快速把excel表格里电话号码导入手机通讯录?
|
7月前
|
开发者
|
8月前
|
JavaScript 计算机视觉
js身份证号输入自动判断其性别和出生年月日呢?进来来来来
js身份证号输入自动判断其性别和出生年月日呢?进来来来来
|
8月前
|
JavaScript
正则表达式(判断是会否是手机号)
正则表达式(判断是会否是手机号)
313 1
|
8月前
leetcode-1694:重新格式化电话号码
leetcode-1694:重新格式化电话号码
61 0
|
8月前
|
SQL
查找重复的电子邮箱
查找重复的电子邮箱
71 0
|
存储 Android开发
方法:一键把一堆手机号码一次性快速导入手机通讯录
手机是人们日常沟通常用的工具,所以自然就要用到手机里面的通讯录联系。因此我们常要把别人的号码存入到手机通讯录里面,如果只是存五个十个那就动动手指就可以了。但是如果你想存把一个电脑excel表格里面的几百个、几千个、几万个等数量级别的联系人一键导入手机通讯录,显然手动一个个来存入是不现实的。我这里演示,通过借助网上常见的便捷工具软件,金芝号码提取导入助手,代替你手动工作来快速完成这个工作,如何一键把一堆手机号码一次性快速导入手机通讯录,省事省时省力。下面做个操作过程的图文讲解。
3917 0
方法:一键把一堆手机号码一次性快速导入手机通讯录
方法:怎么样把word文档里的电话号码快速导入手机通讯录?
步骤一:在电脑上打开软件,金芝号码提取导入助手。顾名思义,就是先提取号码,也就是把你的word文档里的号码等杂乱文本都复制好,粘贴到软件的第一个模块“号码单独提取”上,快速提取号码,把号码整理成整齐的一行一列。步骤二:接着你把整理好的号码粘贴到软件的第三个模块“导入通讯录”,点“生成通讯录”,就可以在电脑上得到一个通讯录文件,最后你把这个电脑文件发给你的手机,在手机上打开它,就可以把word文档里的号码快速导入通讯录。步骤三:当然了,也会有人问:怎么把电脑上的文件发送给手机。这个就是平常怎么发就怎么发呀,通过电脑某信或者电脑Q,发送发给你手机某信或Q,不就可以了吗?
方法:怎么样把word文档里的电话号码快速导入手机通讯录?
方法:如何批量导入电话号码存到手机通讯录?
步骤一:首先,把你电脑上的excel表格打开,把你的人铭和号码,分别复制,粘贴到软件,金芝号码提取导入助手。步骤二:在它的下面点“转换通讯录”,你会得到一个通讯录文件,最后你把这个电脑上得到的文件,发给你的手机w信或者手机q,在手机上打开这个文件就会自动把电话号码批量存到手机通讯录。步骤三:不用我多说,你也知道怎么把电脑文件怎么发给手机的,一般不都是通过电脑w信电脑q发给你的手机w信手机q吗?在手机上打开这个文件,就可以一键批量把号码导入通讯录。
方法:如何批量导入电话号码存到手机通讯录?