事象の水平線

個人的ブックマーク代わりなメモ書きブログ。 地球は丸いよ。↓このへん。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop
最近javaばっか触ってます。
組み合わせ作りたいなーと思った時に、なんかしらんけどいつぞや作ったコードがあったので乗っけておこう。すぐ何処に書いたか忘れちゃうから。
まーアルゴリズムなことなんでjava関係ないですが。
なんかスマートじゃない気がソコハカトナクするんですけど・・・
深さが決まってる時は、for(int i=0; i<ilength; i++){ for(int j=i+1; j<jlength; j++){~~とかやっちゃうんだけど、引数で任意にしたかったので再帰です。
数学とか忘れました。
重複を許さない組み合わせです。
どうやって思いついたんだかわからんけど;;
staticとか当然関係ないです。HashSet使ったらよかったんちゃう?


private static void testCombinationReculsion(){
ArrayList<ArrayList<Integer>> resultsList = new ArrayList<>();
ArrayList<Integer> seeds = new ArrayList<>();
seeds.add(1);
seeds.add(2);
seeds.add(3);
seeds.add(4);
seeds.add(5);
seeds.add(6);
seeds.add(7);
seeds.add(8);
seeds.add(9);

//使い方
int m = 3;
combination(resultsList, new ArrayList<Integer>(), seeds, 0, m-1, 0);

for(ArrayList<Integer> menbers : resultsList){
for(int menber : menbers){
System.out.print(menber + ",");
}
System.out.println();
}
}

private static void combination(ArrayList<ArrayList<Integer>> resultList, ArrayList<Integer> combList, ArrayList<Integer> seeds, int nest, int depth, int startI){
ArrayList<Integer> tempList = new ArrayList<>(combList);
for(int i=startI; i<seeds.size()-depth+startI; i++){
if(i>=seeds.size()){continue;}
combList = new ArrayList<>(tempList);
combList.add(seeds.get(i));
if(nest < depth){
combination(resultList, combList, seeds, nest+1, depth, i+1);
}else if(nest >= depth){
resultList.add(combList);
}
}
}


前々から思ってたけど、syntaxhighlighterいれたいなー。どうやるんだろ。
めんどいからいいや。
スポンサーサイト

PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。