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);
        }
    }
    
  • 相关阅读:
    JQuery0007:JQuery跨域无刷新分页
    H5_0034:toast提示
    H5_0032:chrome以窗口模式运行(无地址栏与标签栏)
    H5_0031:浏览器弹窗
    JN_0022:VSCode操作技巧 去除空行 去掉换行付
    JQuery0003:事件触发与解除
    CSS0001: CSS判断手机 平板 PC
    Web_0006:阿里云服务器OSS缓存设置清理
    H5_0030:iframe 全屏嵌入,父级获取iframe中嵌入的dom对象
    JN_0020:Chrome保存整个网页为图片
  • 原文地址:https://www.cnblogs.com/yw0219/p/9074963.html
Copyright © 2011-2022 走看看