叠盘子

68 阅读2分钟

问题描述

小明是个讲究生活质量的人,家里的一切都井井有条,比如说家中的盘子都是一个系列,每个盘子都标有唯一的一个整数作为标识。在每次吃完饭后,小明都会将这些盘子按照特定的顺序叠放收拾起来,收拾的规则如下:

  • 盘子叠放后会被分为多堆,每一堆都可能是由一个或多个盘子组成

  • 叠放在同一堆的盘子的序号都是不间断递增的(例如 1,2,3 为不间断递增,而 1,3,4 则只是普通的递增),并且这些盘子的数量至少是 3 个

  • 这些盘子的序号在被叠放之前就是递增的

请问你可以编写一个程序,帮助小明算一算盘子该如何叠放么?

思路

输入本身就是递增的,且数字中间隔着空格,我们直接通过空格将字符串分割,然后将相应的字符转化到一个整数数组中中,之后按照题目要求模拟即可,我是枚举每个数字,然后对这个数字往后找看是否是不间断递增,是的话就将它的区间按照题目要求加入到答案中去,不是的话就只加入当前的这个数字 `

    public static String solution(String plates) {
   
    String[] s=plates.split(" ");
    int len=s.length;
    int[] nums=new int[len];
    String ans=new String();
    for(int i=0;i<len;i++){//将分割后的字符串数组转化为整型数组
        nums[i]=Integer.parseInt(s[i]);
    }

    
    for(int i=0,j;i<len;){
        for(j=i+1;j<len;j++){
            if(nums[j]-nums[j-1]>1)
                break;
        }
        if(j-i>=3){
            ans=addnum(ans, nums[i], nums[j-1],true);
            i=j;
        }else{
            ans=addnum(ans, nums[i], -1,false);
            i++;
        }
    }
    return ans;
}
//用来向答案中添加元素,布尔型数据用来判断加入的是数字区间还是单个数字
public static String addnum(String s, int lnum, int rnum,boolean sign) {

    if (!sign) {
        if(s.length()!=0)
            s += "," + lnum;
        else
            s+= lnum;
    } else {

        if (s.length() != 0) {
            s += "," + lnum + "-" + rnum;
        } else {
            s += lnum + "-" + rnum;
        }
    }
    
    return s;
}`