77. 组合

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

示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combinations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 1 public class Solution {
 2     private boolean[] flag = null;
 3     private List<List<Integer>> res = null;
 4
 5     private void helper(int n, int k, int cur,List<Integer> subset){
 6         if (k == 0) {
 7             res.add(new ArrayList<>(subset));
 8             return;
 9         }
10         for (int i = cur; i <= n; i++) {
11             if (!flag[i]){
12                 if (subset.size() > 0 && subset.get(subset.size()-1) >= i)
13                     break;
14                 flag[i] = true;
15                 subset.add(i);
16                 helper(n, k-1, i+1, subset);
17                 flag[i] = false;
18                 subset.remove(subset.size()-1);
19             }
20         }
21     }
22
23
24     public List<List<Integer>> combine(int n, int k) {
25         flag = new boolean[n+1];
26         res = new ArrayList<>();
27         List<Integer> subset = new ArrayList<>();
28
29         helper(n,k,1,subset);
30         return res;
31     }
32
33     public static void main(String[] args) {
34         List<List<Integer>> combine = new Solution().combine(4, 2);
35         for (List<Integer> e : combine) {
36             System.out.println(e);
37         }
38     }
39 }

原文地址:https://www.cnblogs.com/yfs123456/p/11615464.html

时间: 2024-10-31 08:42:33

77. 组合的相关文章

LeetCode 77. 组合(Combinations)

题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路 回溯法,每次遍历到一个元素分为放入与不放入集合两种情况,若集合长度为k,则加入到结果中. 代码 1 class Solution { 2 public: 3 vector<vector<int>> combine(int n, int k) {

代码题(19)— 组合与排列

1.77. 组合 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] class Solution { public: vector<vector<int>> combine(int n, int k) { vector<vector<int>> res; vector<int>

排列组合相关

目录 78/90子集 39/40组合总和 77组合 46/47全排序,同颜色球不相邻的排序方法 78/90子集 输入: [1,2,2] 78输出: [[], [1], [2], [1 2], [2], [1 2], [2 2], [1 2 2]] 90输出: [[], [1], [2], [1 2], [2 2], [1 2 2]] // 递归版简单很多,且与下面的39/40组合总和很相似 public static List<List<Integer>> subsets(int[

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

leetCode 77.Combinations (组合)

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example, If n = 4 and k = 2, a solution is: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 思路:此题意思是给一个n,和k,求1-n的k个数的组合.没有反复(位置交换算反复).可用排列组合的统一公式求解. 代码例如以下: p

LeetCode(77):组合

Medium! 题目描述: 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路: 这道题让求1到n共n个数字里k个数的组合数的所有情况,还是要用深度优先搜索DFS来解,根据以往的经验,像这种要求出所有结果的集合,一般都是用DFS调用递归来解.那么我们建立一个保存最终结果的大集合res,还要定义一个保存每一个组合的小集合

LeetCode 第77题 组合

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],] 思路: 回溯 BFS搜索 关键在于循环边界的控制. eg: n = 4 , k = 2 要求选2个数 1. 目前选了0个数 先从 1~3中选一个数 (不能选第4个数,相当于剪枝,如果第一个数就选4的话,第二个数没法选了) 2. 目前选了1个数 假设第一步在(1,2,3)中选了2,那么

利用原生JS判断组合键

<script type="text/javascript"> var isAlt = 0; var isEnt = 0; document.onkeydown = function(e){ var evn = e||event; var code = evn.keyCode||evn.which||evn.charCode; if(code==13){ isEnt = 1; } if(code==18){ isAlt = 1; } // 判读Alt+Enter组合键 if

设计模式 -- 组合模式(Composite)

写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初识组合模式,包括:定义.结构.参考实现 体会组合模式,包括:场景问题.不用模式的解决方案.使用模式的解决方案 理解组合模式,包括:认识组合模式.安全性和透明性.父组件引用.环状引用.组合模式的优缺点 思考组合模式,包括:组合模式的本质.何时选用 参考内容: 1.<研磨设计模式> 一书,作者:陈臣.王斌 --