所以我有一个已排序的数组,例如[1,2,3,8,9,10]或[1,1,2,2,3,3]或[1,3,4, 5,6,7],我想找到3个以上连续数字的唯一组合。因此在上面的示例中可能是(1,2,3)和(8,9,10)或(1,2,3)(1,2,3)(1,2,3)或(3 ,4,5,6,7)。
所以我写了一些适用于两个连续数字的东西,但是我不确定如何搜索5个连续数字,然后是4个连续数字,然后是3。相同。
这里会进行递归工作吗?
for (int i = 0; i < 5; i++) {
for (int j = i+1; j<5; j++) {
if (array[i] == array[j] - 1) {
score++;
break;
}
}
}
答案 0 :(得分:0)
如果没有重复的数字,这将起作用:
static List<List<Integer>> seqCombos(List<Integer> a)
{
List<List<Integer>> seqs = new ArrayList<>();
for(int j=0, i=1; i<=a.size(); i++)
{
if(i == a.size() || a.get(i)-1 != a.get(i-1))
{
if(i - j >= 3)
seqs.add(a.subList(j, i));
j = i;
}
}
return seqs;
}
测试:
public static void main(String[] args)
{
Integer[][] tests =
{
{1, 2, 3, 8, 9, 10},
{1, 3, 4, 5, 6, 7},
};
for(Integer[] test : tests)
{
System.out.println(Arrays.asList(test));
List<List<Integer>> seqs = seqCombos(Arrays.asList(test));
for(List<Integer> seq : seqs)
System.out.println(seq);
System.out.println();
}
}
输出:
[1, 2, 3, 8, 9, 10]
[1, 2, 3]
[8, 9, 10]
[1, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7]
如果有重复的数字,那么事情就变得复杂得多。我什至不知道规则是什么,因为我看不出如何从[1,1,2,2(1,2,3)(1,2,3)(1,2,3)得到,3,3]?