JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。、

当 n = 4 ,k = 2 时;
结果为: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]


算法设计

package com.bean.algorithmbasic;import java.util.LinkedList;
import java.util.List;public class CombinationsDemo5 {/** n = 4 and k = 2* 结果: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]* */// 全局变量,存储返回结果private List<List<Integer>> ret = new LinkedList<List<Integer>>();public List<List<Integer>> combine(int n, int k) {// 非法条件:一旦出现以下条件,直接返回空if (n <= 0 || k <= 0 || k > n)return ret;// 初始化一个可能结果c,当前c为空;c中存储一个可能的组合结果(c这个链表在整个过程是会变的)LinkedList<Integer> c = new LinkedList<Integer>();// 调用递归函数generateCombination(n, k, 1, c);// 返回结果return ret;}// 递归函数private void generateCombination(int n, int k, int start, LinkedList<Integer> c) {/*** @param n:*            题目中给的n* @param k:*            题目中给的k* @param start:*            从1-n中的第start个数开始往后考虑组合问题* @param c:*            存储一个可能的组合结果**/// 递归终止条件if (c.size() == k) {// 添加结果ret.add((LinkedList<Integer>) c.clone());return;}// 递归过程// start:从start这个数开始考虑组合问题// 截止当前,c中已经存储了c.size()个元素,因此还需要 k - c.size()个元素才可以完成组合寻找// 意味着从[i...n]中间要存在k - c.size()个数才有解,否则的话当前组合解中不可能凑够k个值// 因此为了保证[i...n]至少有k - c.size()个解,就需要i <= n - (k - c.size())for (int i = start; i <= n - (k - c.size()) + 1; i++) {c.addLast(i);generateCombination(n, k, i + 1, c);c.removeLast(); // 回溯}}public static void main(String[] args) {// TODO Auto-generated method stubCombinationsDemo5 cd = new CombinationsDemo5();int n = 4;int k = 2;List<List<Integer>> list = cd.combine(n, k);System.out.println(list.toString());}}

JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)相关推荐

  1. 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数

    我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n ...

  2. 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num

    2021-10-20:分数到小数.给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数.如果小数部分为循环小数,则将循环的部分括在括号内.输入: num ...

  3. 题目;我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推现在,给定两个整数n和m,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素

    题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...

  4. A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值。保证A、B及结果均在整型范围内。

    A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值.保证A.B及结果均在整型范围内 输入 一行,包含两个整数A,B,中间用单个空格隔开.A和B均在整型范围内. 输出 一个整数,即A+B的值. ...

  5. 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素

    题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...

  6. 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的

    素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数 ...

  7. 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

    记录自己坑了又坑的每一天: 原题: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 div ...

  8. 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符.返回被除数 dividend 除以除数 divisor 得到的商.示例 1:输入: ...

  9. 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素

    我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n ...

最新文章

  1. 嵌入式实现 微信网页版 群发信息。
  2. 看看我最关心的动态库中到底有多少函数 - gdiplus.dll
  3. 现在不坚持,以后都会放弃
  4. 这场论文复现的华山论剑,谁能拔得头筹
  5. 洛咕 P4474 王者之剑
  6. win 2016 ssh_多台WIN10之间的SSH免密登录
  7. Socket网络编程--小小网盘程序(1)
  8. cortex M0 软件分层架构 RTOS
  9. linux c设置系统时间函数,Linux C 中获取local日期和时间 time()localtime()函数
  10. 让我们一起Go(二)
  11. VB小技巧 文本框中屏蔽系统右键菜单用自定义菜单代替自带右键菜单
  12. TypeScript笔记(3)—— 使用WebPack工具
  13. Java 类加载机制概述、类加载流程、自定义类加载器
  14. 权重计算方法二:熵权法(EWM)
  15. 系统自动化制作工资条,很简单,还能发送短信息
  16. 5.WireShark学习-WireShark中的时间显示
  17. 北京大学C语言学习第6天
  18. Wavel Sequence HDU - 6078 (dp)
  19. 《阿里云的这群疯子》
  20. 优化方法之黄金分割法(Python实现)

热门文章

  1. 实现字符串左旋和右旋的常见方法
  2. 基于FPGA的DVB-S2、DVB-S2X标准的 LDPC 编码IP、译码 IP core
  3. 正式环境使用Mysql MGR集群部署(一看就会)
  4. [笛卡儿积]业务中的复选框条件--输出所有的情况结果
  5. Linux 安装 scidavis
  6. 递归算法的原理(js)
  7. 阿里巴巴:今年营收 5000 亿,明年GMV要再增一万亿
  8. osgEarth的Rex引擎原理分析(七十三)从高程文件读取的高程信息如何填充rex的高程瓦片
  9. list集合移除指定元素
  10. python写乘法口诀表好记方法_乘法口诀表好记方法