• 【每日3题(3)】重新格式化电话号码


    3妹
    2哥:3妹,别看肥皂剧了,今天我们来做一个算法题。

    3妹关掉了电视,高兴的跑过来。
    3妹:好呀好呀,java的数据结构我已经全部学完了,尽管放马过来吧。

    题目:

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

    java代码:

    class Solution {
        public String reformatNumber(String number) {
            number = number.replace(" ", "");
            number = number.replace("-", "");
    
            int n = number.length();
            StringBuilder sbd = new StringBuilder();
            if(n <=3) {
                sbd.append(number);
                return sbd.toString();
            }
            
            int duan = n/3;
            int yu = n%3;
    
            for(int i=0;i<duan-1;i++) {
                sbd.append(number.substring(3*i, 3*i+3)).append("-");
            }
    
            if(yu ==0) {
                sbd.append(number.substring(n-3));
            }else if(yu == 1) {
                sbd.append(number.substring(n-4, n-2)).append("-").append(number.substring(n-2));
            }else {
                sbd.append(number.substring(n-5, n-2)).append("-").append(number.substring(n-2));
            }
    
            return sbd.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    RabbitMQ工作模式-路由模式
    深入浅出:npm常用命令详解与实践
    基于JAVA医院门诊挂号系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    RediSearch的简单使用与总结
    程序员副业收入之如何使用 API 建立收入流
    编译版本问题androidx.appcompat:appcompat-resources 引用错误
    vue组件缓存
    机器学习、深度学习、强化学习、迁移学习的关联与区别
    AI落地难?云原生助力企业快速应用机器学习 MLOps
    【Linux】常用命令
  • 原文地址:https://blog.csdn.net/kangbin825/article/details/125515212