2012-04-28 4 views
-2

Я буду благодарен за любую помощь по следующей проблеме. У меня есть n целых чисел от 0 до n-1, и я пытаюсь сгенерировать список всех возможных комбинаций длины k (например, k конкатенированных целых чисел), так что каждая пара последовательных целых чисел не равна. Так, например, (1) (2) (3) (2) было бы справедливо при k = 4, но (1) (2) (3) (3) было бы неверным. Любые идеи о том, как подойти к этому наиболее эффективно? (Я не слишком заботится о длине/степени сложности кода, только КПД)Сочетания целых чисел

+2

@A. Р. С .: То, что Луи Вассерман, вероятно, имел в виду: «что ты пробовал»: покажи нам код (и расскажи нам, что не работает конкретно). – ChristopheD

+0

На самом деле это больше похоже на то, что он пытается переборщить шаблон разблокировки. – maybeWeCouldStealAVan

ответ

3

Это код:

void Generate(int[] source, List<int[]> result, int[] build, int k, int num) { 
     if (num == k) { 
     int[] a = (int[])build.clone(); 
     result.add(a); 
     return; 
     } 

     for (int i = 0; i < source.length; i++) 
     if (num == 0 || source[i] != build[num - 1]) 
     { 
      build[num] = source[i]; 
      Generate(source, result, build, k, num + 1); 
     } 
    } 

Как звонить:

int k = 2; 
    List<int[]> a = new ArrayList<int[]>(); 
    Generate(new int[]{1,2,3}, a, new int[k], k, 0); 
0
public static void recursiveOutput(Integer n, int k, int limit, String prints){ 
    k++; 
    if(k>limit) 
     return; 
    String statePrints = prints; 
      //cycle through all available numbers 
    for(Integer i = 1; i<=n; i++) 
    { 
     statePrints = prints; 
        //First cycle 
     if(k==1){ 
      statePrints+= "(" + i.toString() + ")"; 
      recursiveOutput(n, k, limit, statePrints); 
     } 
        //check if predecessor is not the same 
     if(i != Integer.parseInt(statePrints.substring(statePrints.length()-2,statePrints.length()-1))){ 
      statePrints += "(" + i.toString() + ")"; 
      recursiveOutput(n, k, limit, statePrints); 
     } 
    } 
      //Check if the length matches the combination length 
    if(statePrints.length() == 3 * limit) 
    System.out.println(statePrints); 
} 

звонок: recursiveOutput(3,0,4,"");

0
public class Generator { 
    final int k = 2; 
    final char[] n = new char[]{'0','1','2','3','4','5','6','7','8','9'}; 
    final char[] text = new char[k]; 

    public void gen(int i, int not_n) { 
     if(i == k) { 
      System.out.println(text); 
      return; 
     } 

     for(int j = 0; j < n.length; j++) { 
      if(j == not_n) continue; 
      text[i] = n[j]; 
      gen(i+1, j); 
     } 

    } 
    public static void main(String[] args) { 
     new Generator().gen(0, -1); 
    } 

}

Смежные вопросы