算法笔记-lc-1694. 重新格式化电话号码(简单)

phoneformatter:基于API的智能电话号码格式化工具 电话号码作为全球通信的基础标识,其格式在不同国家和地区存在显著差异。API的核心目标是提供一个统一、高效、可扩展的解决方案,用于解析、识别、格式化和验证全球范围内的电话号码。该API不仅支持E.164等国际标准,还能根据区域设置(Locale)输出本地化格式,确保数据在跨国系统中的准确传递与展示。E.164标准规定了一个最多15位数字的编号结构,用于唯一标识任何公共电信网络中的终端设备。其基本格式如下:+[国家代码][国内目的地代码(区号)][用户号码] 阅读详情

算法笔记-lc-1694. 重新格式化电话号码(简单)

题目

题干

给你一个字符串形式的电话号码 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 个数字。

题解

方法一:找出所有的数字并分块

思路与算法

我们首先对给定的字符串number 进行一次遍历,找出所有的数字,并记录在字符串 digits 中。如果使用的语言不支持可修改的字符串,也可以记录在数组中。

随后我们对 digits 进行一次遍历。在遍历的过程中,我们可以存储剩余的数字数量 nn 以及当前遍历到的字符位置pt:

当 n>4 时,我们取出三个连续的字符,作为一个块;

当 n≤4 时,我们根据题目的要求,将剩余的 n 个字符进行分块,并结束遍历。

我们还需要在块之间添加破折号。根据使用的语言不同,可以考虑在遍历的过程中添加破折号,并在遍历完成后直接返回答案;或者在遍历结束后再添加破折号,并在遍历完成后使用 join() API 得到答案。

class Solution {
    public String reformatNumber(String number) {
        StringBuilder digits = new StringBuilder();
        for (int i = 0; i < number.length(); ++i) {
            char ch = number.charAt(i);
            if (Character.isDigit(ch)) {
                digits.append(ch);
            }
        }

        int n = digits.length();
        int pt = 0;
        StringBuilder ans = new StringBuilder();
        while (n > 0) {
            if (n > 4) {
                ans.append(digits.substring(pt, pt + 3) + "-");
                pt += 3;
                n -= 3;
            } else {
                if (n == 4) {
                    ans.append(digits.substring(pt, pt + 2) + "-" + digits.substring(pt + 2, pt + 4));
                } else {
                    ans.append(digits.substring(pt, pt + n));
                }
                break;
            }
        }
        return ans.toString();
    }
}

复杂度分析

时间复杂度:O(n),其中 n 是字符串number 的长度。

空间复杂度:O(n),即为字符串digits 以及其它临时字符串需要使用的空间。

SIC知识(8)--碳化硅的制备难点 6. 器件制造难点:碳化硅器件制造过程中的掺杂步骤需要在高温下完成,且需要采用高温离子注入的方式,这与传统硅基器件的扩散工艺不同。这些步骤需要精密的设备和严格的工艺控制,以确保器件的结构和功能。综上所述,碳化硅的制备难点相较于传统硅基器件主要在于更高的制备温度、更慢的生长速度、晶型控制的复杂性、后加工的难度、外延工艺的低效率以及器件制造的特殊要求和较高的成本。- **数据管理**:需要有效的数据管理系统来跟踪和记录生产过程中的每一个步骤,包括原料的批次、生长条件、加工参数等,以确保产品质量的可追溯性。 阅读详情

相关推荐

RAGFlow核心引擎DeepDoc之PDF解析大起底

本文深入解析RAGFlow中的deepdoc模块,重点介绍了pdf文档解析器的实现细节。deepdoc包含parser(文档解析器)和vision(视觉处理)两大核心功能,其中pdf解析是最复杂的部分。文章详细剖析了PdfParser类的设计架构,包含PlainParser(基础文本提取)、RAGFlowPdfParser(核心处理流水线)和VisionParser(视觉扩展)三个类,它们通过统一的__call__方法返回标准化结果。还具体讲解了初始化过程如何加载OCR引擎、布局识别模型、表格结构识别器等关

yxkong的专栏 2024

【LeetCode】C++ :简单题 - 字符串 1694. 重新格式化电话号码

1694. 重新格式化电话号码 难度简单6 给你一个字符串形式的电话号码number。number由数字、空格' '、和破折号'-'组成。 请你按下述方式重新格式化电话号码。 首先,删除所有的空格和破折号。 其次,将数组从左到右每 3 个一组分块,直到剩下 4 个或更少数字。剩下的数字将按下述规定再分块: 2 个数字:单个含 2 个数字的块。 3 个数字:单个含 3 个数字的块。 4 个数字:两个分别含 2 个数字的块。 最后用破折号将这些块连接起来。注意,重新...

weixin_44566432的博客 545

Hand-Eye 标定误差分析:从理论到 C++ 实现

本文深入探讨了机器人手眼标定中的核心环节——误差分析。文章从AX=XB方程的理论残差出发,详细解析了旋转与平移误差的数学定义与物理意义,并提供了一个工业级的C++实现代码,用于计算重投影误差。通过误差分析,工程师可以量化标定精度,诊断问题根源,从而确保视觉引导机器人系统在实际应用中的可靠性与精确性。

c7d8e的博客 695

按给定格式输出电话号码

题目描述 编写一个程序,以(xxx) xxx-xxxx的格式输入电话号码,并以xxx.xxx.xxxx的格式输出该电话号码。 输入 输入(xxx) xxx-xxxx格式电话号码。 输出 输出xxx.xxx.xxxx格式电话号码,以"You entered "开头,xxx.xxx.xxxx结尾。注意"entered"后留一个空格。 样例输入 (404) 817-6900 样例输出 You entered 404.817.6900 #include <stdio.h> int main(void)

半濠春水的博客 691

从厘米级到公里级:北斗网格10级精度在ArcPro中的完整应用指南

本文提供了北斗网格十级精度体系在ArcGIS Pro中的完整应用指南。详细解析了从660公里到1.5厘米的十级网格尺度及其编码逻辑,并重点演示了如何在ArcPro中生成网格、计算编码,以及根据项目需求(如滑坡监测)选择合适精度层级的实战策略。指南旨在帮助GIS专业人士利用这套统一的网格框架,高效管理多尺度空间数据并优化分析工作流。

Black的专栏 471

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

重新格式化电话号码

每日一题2022/10/1

青釉Oo的博客 442

总结:知识图谱KG+大模型LLM

知识图谱KG+大模型LLM

安静的软件工程师 4209

初级编程题:电话号码脱敏

0526’解释:13 位数字,2 个数字是国家号码,另外 11 个数字是本地号码。本题保让脱敏处埋前后的电诂号码的长度都是团区间|11,40]上的整数。示例 1:自测输入格式:1(3220)200-520。11位和13位的电话号码后面的处理逻辑都是相同的。输入:"1(3220)200-520’只需要区别对待前几位即可。

m0_48038376的博客 595

Linux V3H 平台开发系列讲解(摄像头)2.3.1 MAX96912 MAX96717 GMSL1 CSI 2lane配置

​ 单路摄像头,数据流类型YUV422, mipi接口,经过MAX96717 串行器,gmsl1链路 到解串器MAX96712,最后mipi csi 2lane(lane0 lane1)输出到 renesa v3h soc开发板; ​

xian18809311584的博客 579

JAVA:Spring Boot3 集成 Spring AI 实现 Skill 开发

本文介绍了如何通过Spring Boot和Spring AI实现大模型技能(Skill)开发,让AI具备调用业务系统能力。文章首先解释了Skill的概念,即AI可调用的业务能力,如查询订单、天气等,并展示了执行流程和整体架构。然后详细介绍了实践样例,包括技术版本、Maven依赖配置、AI服务设置、ChatClient创建和Skill技能注册中心的实现。注册中心提供了技能的注册、查询、启用/禁用等功能,支持按类别管理技能,并能够获取所有可用技能列表。通过这种方式,开发者可以轻松为大模型扩展业务功能调用能力。

木头 622

前端Vue自定义手机号文本格式化组件手机号码文本转星号

对于cc-format-phone组件,我们可以根据不同的业务需求,拆分出不同的手机号格式化规则。cc-format-phone组件是前端Vue组件的一个示例,可以方便地在uni-app项目中实现手机号文本格式化的功能。组件化开发可以将大型应用分解为一系列独立且可复用的组件,每个组件可以单独开发、测试、维护,并且可以随意组合,大大提高了开发效率和可维护性。对于cc-format-phone组件,我们可以使用Vue CLI等构建工具来构建该组件,并且可以通过uni-app插件市场发布该组件,供其他人使用。

chenchuang0128的博客 667

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3109

写一个手机号344(xxx xxxx xxxx)格式方法

/** * 电话3 4 4格式(即:xxx xxxx xxxx) * 电话长度11位数字 * @param view 输入框 * @param text 文本 */ public static void onTextChanged344(EditText view, String text) { if (view== null || text == null || text.length() == 0) return; char space = ' '; int inde.

udbpgym的博客 9208

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java 格式化手机号码_格式化手机号码 - T_SevenS的个人空间 - OSCHINA - 中文开源技术交流社区...

手机号会存在加区号/国际ip号的问题,如+8615851732142、008615851732142、17951158517332142或者0158517321142,上面几个号码实际都是同一个号码,但加了不同的前缀。程序中会将上面几种情况视为同一个号码,具体逻辑如下: java参考代码......String tel = "+008613701234567";//手机号正则String reg ...

weixin_31995467的博客 777

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

模拟。

墨染 418

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【LeetCode每日一题】2022-10-01 1694. 重新格式化电话号码 Java实现

LeetCode每日一题 国庆节快乐

guliguliguliguli的博客 778

1694. 重新格式化电话号码

Java:while 切糖果。Java:自己搓的代码。

long_steve的博客 261

java 联系电话/证件号码脱敏处理

java 联系电话/证件号码脱敏处理

聆听 1059

2023年笔试算法-四达时代

2023年春招四达时代笔试真题。

fyphome 2342

leetcode刷题(模拟问题)

连续重复字符是指。

2301_79811033的博客 1293

力扣题库电话号码的字母组合

力扣电话号码字母组合

qwasdyt的博客 254

电话号码格式化

const validateMobile = (val) => { val = val.replace(/[^\d]/g, '').substr(0,11) if (val.length <= 3) { return val } else if (val.length <= 7) { val = val.replace(/(\d{3})(\d{0,4...

coderMozart的博客 1391

1694 重新格式化电话号码

题目描述: 给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。 请你按下述方式重新格式化电话号码。 首先,删除 所有的空格和破折号。 其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块: 2 个数字:单个含 2 个数字的块。 3 个数字:单个含 3 个数字的块。 4 个数字:两个分别含 2 个数字的块。 最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多

weixin_44171872的博客 520

力扣模拟题刷题

本文总结了多个LeetCode算法题的解法,主要涉及字符串处理、数组操作和位运算等。包括二进制字符串操作步骤计数(1404)、数组元素合并与处理(2460、3834)、任务调度优化(2365)、字符串添加空格(2109)、二进制加法(LCR002)、位运算(3688)、队列模拟(2073)和浇水问题模拟(2079)。各题解提供了多种实现方法,如进位处理、栈/队列模拟和双指针等技巧,并附有详细注释和优化思路。

2401_88089822的博客 297

Java 手机号码格式化为182****5716

Java 手机号码格式化为182****5716 java动态代理demo

qq_44597856的博客 338
上一篇: 大小根堆和java中双优先队列的应用
下一篇: 算法笔记-lc-777. 在LR字符串中交换相邻字符(简单)
Hell_potato777
博客等级 码龄6年 47粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值