• 入门力扣自学笔记165 C++ (题目编号:1694)


    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 个数字。


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/reformat-phone-number
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    思路:

    就是直接附加,一旦是3的倍数,就加-

    最后存在如下情况

    无需处理 -xxx -xxx

    需要处理 xxx-x -> xx-xx


    代码:

    1. class Solution {
    2. public:
    3. string reformatNumber(string number) {
    4. string raw = "";
    5. for (char c : number)
    6. {
    7. if (c >= '0' && c <= '9')
    8. {
    9. raw += c;
    10. }
    11. }
    12. int realLen = 0;
    13. string res = "";
    14. int n = raw.size();
    15. for (int i = 0; i < n; ++i)
    16. {
    17. res += raw[i];
    18. ++realLen;
    19. if (realLen % 3 == 0 && i < n-1)
    20. {
    21. res += '-';
    22. }
    23. }
    24. // 处理最后 -x 情况
    25. if (res[res.size()-2] == '-')
    26. {
    27. swap(res[res.size()-2], res[res.size()-3]);
    28. }
    29. return res;
    30. }
    31. };

  • 相关阅读:
    jclasslib :java class字节码jvm指令分析
    分布式+微服务系统架构
    Git学习使用笔记--(一)
    【NIPS 2017】PointNet++:度量空间中点集的深层次特征学习
    汽车生产RFID智能制造设计解决方案与思路
    安卓APP全局黑白化实现方案
    Spring Security 和 Shiro 该如何选择?
    Postgresql源码(67)LWLock锁的内存结构与初始化
    MySQL的分库分表
    两台Linux服务器之间传送文件
  • 原文地址:https://blog.csdn.net/DK_Sorhic/article/details/127131590