若传入参数值21~40,51~100,41~42,1~50(该参数类型可为string,string[]或list)
合并结果为1~100,21~42(类型可同传入参数)。
传入参数可以重复,如:21~40,51~100,41~42,1~50,1~50,
返回结果也同上。
[code="java"]
//new String[]{"21~40","51~100","41~42","1~50"}
public static Object merge(Object o)
{
if(o instanceof String[])
{
String[] numbers = (String[])o;
int resultLength = numbers.length;
for(int i = 0; i < numbers.length; i++)
{
if(numbers[i] == null) continue;
int start = getStart(numbers[i]);
int end = getEnd(numbers[i]);
if(start > end) continue;
for(int j = 0; j < numbers.length; j++)
{
if(i == j || numbers[j] == null) continue;
int nextStart = getStart(numbers[j]);
int nextEnd = getEnd(numbers[j]);
if(start == (nextEnd + 1))
{
numbers[i] = nextStart + delimiter + end;
numbers[j] = null;
resultLength--;
}
}
}
String[] result = new String[resultLength];
int index = 0;
for(int i = 0; i < numbers.length; i++)
{
if(numbers[i] == null) continue;
result[index++] = numbers[i];
System.out.println(numbers[i]);
}
return result;
}
return null;
}
[/code]
只写了string[]类型的,list等参数类型按照这个思路自己补充就行了
1、首先根据begin-end中的end从小到大排序
2、拿当前和下一个进行判断是否能合并,如果可以合并作为当前;
3、如果不能合并,当前递增1;
4、再进行下一轮;直到最后一组。
21~40,51~100,41~42,1~50
不知道这些是如何作为参数的?是以组的形式么?
这些连续数字组成的参数是几个?本来想写的,但是纠结半天没写了。
1.如果是一组一组连续数字,并且这些组保存在队列或列表中。那么就用该组第一个数字a与其它各组最后一个数字b做比较,如果a=b+1,就构成新的一组数据。并且把刚才满足条件的组从队列或列表中剔除掉。再用该组最后一个数字c与其它各组第一个数字d做比较,如果d=c+1,就继续构成新的一组数据,并且剔除符合条件的组。
2.其它各组数据依次循环处理
忘记两个方法了
[code="java"]
private static final String delimiter = "~";
public static int getStart(String number)
{
String start = number.substring(0, number.indexOf(delimiter));
return Integer.valueOf(start);
}
public static int getEnd(String number)
{
String end = number.substring(number.indexOf(delimiter) + 1);
return Integer.valueOf(end);
}
[/code]