博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归(二)之求排列组合的结果集
阅读量:4036 次
发布时间:2019-05-24

本文共 1842 字,大约阅读时间需要 6 分钟。

求从1~m中,取出n个数,排列组合的结果集,典型案例就是大乐透,红球区从1~35,取出5个数,不计顺序。需要用到递归解决不定层级的for循环问题。

代码如下:

/**     * 求从1到m共m个数中取出其中n个的排列组合的结果集,最典型的案例就是大乐透,红球区是从1~35取出5个数     * 写for循环的话,需要写n层for循环,但是n不确定,所以无法直接写for循环,只能通过递归。而递归过程中,因为要记录排列组合的结果,所以内层的循环需要依赖外层循环的值     * 这就需要外层循环将值传入内层,而且从内层中可以层层访问外层值,所以在此定义了一个内部类,我这里定义了个双向链表,其实只用到了单向功能。     * @param m     * @param n     */    public static void ChoossNFromM(int m, int n){        List
result = new ArrayList<>(); int i = 0; int degree = 0; recursive(i,(m-n+1), degree, n, result,new Node<>(0)); System.out.println(result.size()); //输出结果集大小 //验证下结果集有没有重复的记录,利用set集合,只要set集合的大小和result集合大小一样,说明结果集没有重复结果 Set
set = new HashSet<>(); for(int k=0;k
result, Node node){ for(int i = startInd;i < endInd;i++){ Node myNode = new Node(i+1); myNode.setPre(node); if(degree < n-1){ recursive(i+1,endInd+1, degree+1, n, result, myNode); }else{ int temp = i; int[] item = new int[n]; for(int k = n-1;k>=0;k--){ if(myNode==null) continue; item[k] = myNode.getValue(); myNode = myNode.pre; } result.add(item); } } } /** * 内部类 * @param
*/ static class Node
{ int value; Node
next; Node
pre; public Node(int value){ this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node
getNext() { return next; } public void setNext(Node
next) { this.next = next; } public Node
getPre() { return pre; } public void setPre(Node
pre) { this.pre = pre; } }public static void main(String[] args) { ChoossNFromM(35, 5); }

 

转载地址:http://eqcdi.baihongyu.com/

你可能感兴趣的文章
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>