-2

次の問題について助けていただければ幸いです。0からn-1までのn個の整数があり、連続する整数のすべてのペアが等しくないように、長さkのすべての可能な組み合わせ(つまり、k個の連結された整数)のリストを生成しようとしています。したがって、たとえば、(1)(2)(3)(2)はk = 4で有効になりますが、(1)(2)(3)(3)は無効になります。これに最も効率的にアプローチする方法についてのアイデアはありますか?(コードの長さ/複雑さはあまり気にせず、効率だけを気にします)

4

3 に答える 3

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,"");

于 2012-04-28T19:22:04.160 に答える
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);
    }

}

于 2012-04-28T19:28:36.957 に答える