Newer
Older
ResourceDependencyLogic / src / utils / Permutation.java
@Sakoda2269 Sakoda2269 on 20 Dec 800 bytes 途中まで
package utils;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Permutation {
	
	public static <T> List<List<T>> permutation(Collection<T> list, int n) {
		List<List<T>> res = new ArrayList<>();
		permutation(list, n, new ArrayList<>(), new HashSet<>(), res);
		return res;
	}
	
	private static <T> void permutation(Collection<T> all, int n, List<T> current, Set<T> used, List<List<T>> result) {
		if (current.size() == n) {
			result.add(new ArrayList<>(current));
			return;
		}
		for (T elem : all) {
			if (! used.contains(elem)) {
				current.add(elem);
				used.add(elem);
				permutation(all, n, current, used, result);
				current.remove(current.size() - 1);
				used.remove(elem);
			}
		}
	}
	
}