Javaで組み合わせ(Combination)
用意されてる言語もあるけど、これくらい書けたほうがいいよねってことでメモがてら。
組み合わせの場合は同じ要素を見なくて良いので、再帰で渡してるindexを+1してる。
第二引数に1以下を渡すとバグるけど無視でw
実行結果
[[a, b, c], [a, b, d], [a, c, d], [b, c, d]]
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Stack; public class Test { public static void main(String[] args) { List list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); List ret = combination(list, 3); System.out.println(ret); } public static List<List<String>> combination(List list, int count) { List ret = new ArrayList<List<String>>(); for (int i = 0; i < list.size(); i++) { if (i + count > list.size()) { break; } Stack stack = new Stack<String>(); stack.push(list.get(i)); _combination(ret, list, stack, i + 1, count); } return ret; } private static void _combination(List ret, List list, Stack stack, int index, int count) { for (int i = index; i < list.size(); i++) { stack.push(list.get(i)); if (stack.size() == count) { ret.add(Arrays.asList(stack.toArray())); stack.pop(); continue; } _combination(ret, list, stack, i + 1, count); stack.pop(); } } }