leetcode每日一题:重新格式化电话号码

以下为题目,代码和注释:

public class geshihua {
    /*
    问题:重新格式化电话号码

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

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

    首先,删除 所有的空格和破折号。
    其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:
    2 个数字:单个含 2 个数字的块。
    3 个数字:单个含 3 个数字的块。
    4 个数字:两个分别含 2 个数字的块。
    最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。

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


    输入:number = "1-23-45 6"
    输出:"123-456"
    解释:数字是 "123456"
    步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 "123" 。
    步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 "456" 。
    连接这些块后得到 "123-456" 。

     */


    public String reformatNumber(String number) {

        String[] arr=new String[200];
        String[] arr1=number.split("");//将电话号码存储到字符串中


        String[] s1=new String[200];
        int index=0;//设置索引
        int j=0;
        int i=0;
        int k=0;

        //将字符串抛去" "和"-",其余存入数组中
        for(i=0;i<arr1.length;i++){

            if(!arr1[i].equals(" ") & !arr1[i].equals("-")){
                arr[index]=arr1[i];
                index++;
            }


        }



        //将正确的输出存入数组
        //i用于计算循环次数和统计当前还剩几个数,k用于调用数组
        for(i=index-1,k=0;i>=0;){
            //如果长度大于4
            if(i+1>4){
                s1[j]=arr[k]+arr[k+1]+arr[k+2]+"-";
                j++;
                i=i-3;//数字减去三个
                k=k+3;//数组往后移三个
                //长度小于等于四
            }else{
                if(i+1==4){
                    s1[j]=arr[k]+arr[k+1]+"-"+arr[k+2]+arr[k+3];
                    j++;
                    i=i-4;//数字减去四个
                    k=k+4;//数组往后移四个

                }else if(i+1==2){
                    s1[j]=arr[k]+arr[k+1];
                    j++;
                    i=i-2;//数字减去二个
                    k=k+2;//数组往后移二个
                }else if(i+1==3){
                    s1[j]=arr[k]+arr[k+1]+arr[k+2];
                    j++;
                    i=i-3;//数字减去三个
                    k=k+3;//数组往后移三个
                }
            }
        }

        String s2="";
        for(j=0;;j++){
            if(s1[j]==null){
                break;
            }
            s2=s2+s1[j];

        }

        return s2;






    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值