0
私は123456789のすべての順列を取得しようとしています。私はJTreeを使用しています。私はコンピュータを地面に燃やさなければこれを回避することはできません。ここで私が持っているものです。9過去の番号を返すことなくネストされたFors
//create the root node
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
//create the child nodes
for (int x=1; x<10; x++){
DefaultMutableTreeNode leaf = new DefaultMutableTreeNode(x);
root.add(leaf);
for (int x1=1; x1<9;x1++){
DefaultMutableTreeNode leaf1 = new DefaultMutableTreeNode(x1);
leaf.add(leaf1);
for (int x2=1; x2<8;x2++){
DefaultMutableTreeNode leaf2 = new DefaultMutableTreeNode(x2);
leaf1.add(leaf2);
for (int x3=1; x3<7;x3++){
DefaultMutableTreeNode leaf3 = new DefaultMutableTreeNode(x3);
leaf2.add(leaf3);
for (int x4=1; x4<6;x4++){
DefaultMutableTreeNode leaf4 = new DefaultMutableTreeNode(x4);
leaf3.add(leaf4);
for (int x5=1; x5<5;x5++){
DefaultMutableTreeNode leaf5 = new DefaultMutableTreeNode(x5);
leaf4.add(leaf5);
for (int x6=1; x6<4;x6++){
DefaultMutableTreeNode leaf6 = new DefaultMutableTreeNode(x6);
leaf5.add(leaf6);
for (int x7=1; x7<3;x7++){
DefaultMutableTreeNode leaf7 = new DefaultMutableTreeNode(x7);
leaf6.add(leaf7);
for (int x8=1; x8<2;x8++){
DefaultMutableTreeNode leaf8 = new DefaultMutableTreeNode(x8);
leaf7.add(leaf8);
for (int x9=1; x9<1;x9++){
DefaultMutableTreeNode leaf9 = new DefaultMutableTreeNode(x9);
leaf8.add(leaf9);
}
}
}
}
}
}
}
}
}
}
(X1 = X!)場合、私が試したが、私はそうでX1 < 10にステートメントを変更する必要があるとします。これを行う効率的な方法はありますか?
あり、それにはおそらくきれいに見えるのアプローチがありますが、私はあなたが行っていることを疑いますO(n!)よりもランタイムの効率を上げるためには、その "文字列"の各順列を取っているからです。 – Makoto
それはすべての可能な文字順列をあらかじめ計算しておき、文字列の各文字ですべての文字順列をループしてツリーを作成することです。 –
「効率的」とは、「より速く走る」(ビッグ・オー、壁時計の時間が短いほど良い)、「メモリがより少なくなる」、「コードの数が少ない」などです。 –