集册 Java实例教程 使N个对象大小的所有组合

使N个对象大小的所有组合

欢马劈雪     最近更新时间:2020-01-02 10:19:05

525
使N个对象大小的所有组合

/*

 * Copyright (c) 2012 The Broad Institute

 * 

 * Permission is hereby granted, free of charge, to any person

 * obtaining a copy of this software and associated documentation

 * files (the "Software"), to deal in the Software without

 * restriction, including without limitation the rights to use,

 * copy, modify, merge, publish, distribute, sublicense, and/or sell

 * copies of the Software, and to permit persons to whom the

 * Software is furnished to do so, subject to the following

 * conditions:

 * 

 * The above copyright notice and this permission notice shall be

 * included in all copies or substantial portions of the Software.

 * 

 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES

 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT

 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,

 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR

 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 */

//package com.nowjava;

import java.util.ArrayList;
/**来自 N o w J a v a . c o m - 时代Java**/

import java.util.Collections;


import java.util.List;


public class Main {

    /**

     * Make all combinations of N size of objects

     *

     * if objects = [A, B, C]

     * if N = 1 => [[A], [B], [C]]

     * if N = 2 => [[A, A], [B, A], [C, A], [A, B], [B, B], [C, B], [A, C], [B, C], [C, C]]

     *

     * @param objects

     * @param n

     * @param <T>

     * @param withReplacement if false, the resulting permutations will only contain unique objects from objects

     * @return

     */

    public static <T> List<List<T>> makePermutations(final List<T> objects,

            final int n, final boolean withReplacement) {

        final List<List<T>> combinations = new ArrayList<List<T>>();
/* 来 自 NowJava.com - 时  代  Java*/

        if (n <= 0)

            ;

        else if (n == 1) {

            for (final T o : objects)

                combinations.add(Collections.singletonList(o));

        } else {

            final List<List<T>> sub = makePermutations(objects, n - 1,

                    withReplacement);

            for (List<T> subI : sub) {

                for (final T a : objects) {

                    if (withReplacement || !subI.contains(a))

                    
展开阅读全文