Это будет работать, если нет повторяющихся цифр:
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,2,3) (1,2,3) (1,2,3) из [1,1,2,2, 3,3]?