问题描述
小明是个讲究生活质量的人,家里的一切都井井有条,比如说家中的盘子都是一个系列,每个盘子都标有唯一的一个整数作为标识。在每次吃完饭后,小明都会将这些盘子按照特定的顺序叠放收拾起来,收拾的规则如下:
-
盘子叠放后会被分为多堆,每一堆都可能是由一个或多个盘子组成
-
叠放在同一堆的盘子的序号都是不间断递增的(例如 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;
}`