zoukankan      html  css  js  c++  java
  • 算法-Java组合

    code:

    import org.assertj.core.util.Lists;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    /**
     * https://blog.csdn.net/yhyr_ycy/article/details/52523243
     *
     * @param <E>
     */
    public class Combine<E> {
        private List<List<E>> resList = Lists.newArrayList();
    
        public List<List<E>> combine(List<E> srcList, int require) {
            resList.clear();
            if (require < 0) {
                throw new IllegalArgumentException("");
            }
            if (srcList == null || srcList.size() == 0) {
                return Lists.newArrayList();
            }
            if (require == 1) {
                srcList.forEach(src -> resList.add(Collections.singletonList(src)));
                return resList;
            }
            if (require == srcList.size()) {
                return resList = Collections.singletonList(srcList);
            }
            combinerSelect(srcList, new ArrayList<>(), srcList.size(), require);
            return resList;
        }
    
        private void combinerSelect(List<E> srcList, List<E> workSpace, int n, int require) {
            List<E> copyData;
            List<E> copyWorkSpace;
    
            if (workSpace.size() == require) {
                List<E> newL = Lists.newArrayList();
                newL.addAll(workSpace);
                resList.add(newL);
            }
    
            for (int i = 0; i < srcList.size(); i++) {
                copyData = new ArrayList<>(srcList);
                copyWorkSpace = new ArrayList<>(workSpace);
    
                copyWorkSpace.add(copyData.get(i));
                for (int j = i; j >= 0; j--) {
                    copyData.remove(j);
                }
                combinerSelect(copyData, copyWorkSpace, n, require);
            }
        }
    }
    

    test:

    
    import com.y.Combine;
    import org.assertj.core.util.Lists;
    import org.junit.Test;
    
    import java.util.List;
    
    public class CombineTest {
        @Test
        public void test_combine() {
            Combine<String> combine = new Combine<>();
            List<String> testList = Lists.newArrayList("a", "b", "c", "d", "e");
            List<List<String>> res = combine.combine(null, 3);
            System.out.println(res);
            res = combine.combine(Lists.newArrayList(), 3);
            System.out.println(res);
            res = combine.combine(testList, 1);
            System.out.println(res);
            res = combine.combine(testList, 3);
            System.out.println(res);
            res = combine.combine(testList, 5);
            System.out.println(res);
    //        res = combine.combine(testList, -1);
    //        System.out.println(res);
        }
    }
    
  • 相关阅读:
    iOS有用的三方库和高效工具记录
    正则表达式
    Exception Type & Exception Code
    信鸽推送(XGPush)
    在vue中使用animate.css
    vue 中父子组件传值:props和$emit
    预编译scss以及scss和less px 转rem
    ES6箭头函数及模版字符串
    移动端页面a input去除点击效果及pc端切换
    vue2搭建简易spa
  • 原文地址:https://www.cnblogs.com/yw0219/p/9074963.html
Copyright © 2011-2022 走看看