问题描述:
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], ]
原问题链接:https://leetcode.com/problems/combinations/
问题分析
关于这个问题在之前一篇讨论排列组合的文章里有讨论过。求给定数字范围的组合时,它遵循一个如下的关系:
void combine(源数据集合a, 目的数据集合b, 当前迭代起始点begin, 当前目标数据集合位置cur, int n) { if(cur == n) //输出数组b for(集合a中间从begin到end的元素i) { b[cur] = a[i]; combine(a, b, i + 1, cur + 1, n); } }
概括起来说就是每次我们从一个给定的位置上开始往后取元素,取了一个元素之后继续在它后面的位置递归的取下一个元素。这样就形成了集合取元素的组合。在详细的实现里我们用一个list保存当前取了的元素,采用拷贝构造传递上一个调用的参数。详细的实现如下:
public class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> result = new ArrayList<>(); combine(n, k, 1, result, new ArrayList<>()); return result; } public void combine(int n, int k, int start, List<List<Integer>> result, ArrayList<Integer> l) { if(k == 0) { result.add(l); return; } for(int i = start; i <= n; ++i) { ArrayList<Integer> a = new ArrayList<>(l); a.add(i); combine(n, k - 1, i + 1, result, a); } } }
在上述的实现里,通过在递归的函数里不断创建新的数组,但是新建的数组又是基于原有参数的基础创建的。这种传递的手法有点类似于immutable的实现思路。值得仔细推敲。
相关推荐
例如,`itertools.permutations()`和`itertools.combinations()`可以高效地生成排列和组合。 最后,Python的`unittest`模块是进行单元测试的好工具,可以在本地验证LeetCode问题的解决方案是否正确。通过编写测试...
Combinations of a Phone Number 电话号码的字母组合 回溯法,递归 / Backtrack,Recursion 回溯+递归 Daily Challenge 2020/08/26 20 Valid Parentheses 有效的括号 Stack / 栈 用栈实现配对 Daily Challenge 2020/...
combinations, permutations import random import itertools import collections from fractions import Fraction from collections import Counter import operator import re from functools import reduce from ...
LeetCode刷题总结 1.Two Sum 2.Add Two Numbers 3.Longest Substring Without Repeating Characters 4.Median of Two Sorted Arrays 5.Longest Palindromic Substring (Manacher算法待完成) 6.ZigZag Conversion 7....
例如,`itertools`模块中的`combinations`和`permutations`可以帮助我们进行组合和排列的计算;`heapq`模块则提供了优先队列,对于解决最小堆问题十分便捷。 在LeetCode中,Python的内置函数如`map`、`filter`、`...
java lru leetcode Leetcode 问题的解决方案 问题 解决方案 0001_Two_Sum 0002_Add_Two_Numbers 0003_Longest_Substring_Without_Repeating_Characters ...0004_Median_of_Two_...0017_Letter_Combinations_of_a_Phone_N
leetcode 2 sum c leetcode 力扣(Leetcode)编程题,JavaScript版本。 编号 中文题目 英文题目 题目描述 JavaScript 难度 1 Two ...Combinations of a Phone Number DFS 中等 18 4Sum 中等 19 Remo
3. **Python标准库**:如`collections`中的`deque`(双端队列)可用于BFS,`itertools`中的`combinations`或`permutations`可以用于生成所有可能的解决方案。此外,`heapq`模块可用于优先队列,这对于解决某些优化...
leetcode 316 Every Day Leetcode This project is created to record the ...leetcode. ...设置一个辅助栈专门用于放置当前最小的值,每次压栈时主栈压入新数据,辅助栈压入当前最小数据 ...Combinations
Combinations (medium) --locked √ 357 Count Numbers with Unique Digits(medium) 547 Friend Circles (medium) 51 N-Queens (hard) 132 Palindrome Partitioning (hard) 212 Word Search II (hard) DFS /二叉树 ...
执行 名称规则#Index#。#Function#.go索引表示leecode中的数字 测试用例 名称规则#Index#。#Function#_test.go 通用定义 ...letterCombinations 0018 四数之和 四和 0019 删除链表的倒数第N个
- 使用`itertools`模块提供的工具函数,如`combinations()`, `permutations()`等,处理组合和排列问题。 - 应用动态规划、贪心算法、回溯法等算法思想,解决复杂问题。 4. **'leetcode2-master'项目**: - '...
python python_leetcode题解之077_Combinations
c c语言_leetcode题解之0077_combinations.zip
javascript js_leetcode题解之77-combinations.js
Combinations of a Phone Number Medium 回溯、暴力 0034 Find First and Last Position of Element in Sorted Array Medium 二分 0039 Combination Sum Medium 回溯 0040 Combination Sum II Medium 回溯 0046 ...
Combinations of a Phone Number 093:Restore IP Addresses 树的遍历问题也可以用这种思想来解释。只不过是特殊的递归而已。(只有两路,不用循环) 题型二:动态规划(要整理搜索和DP的区别,都可以用一个状态转移...
c c语言_leetcode 0017_letter_combinations_of_a_phone_number.zip
Combinations of a Phone Number backtracking int solution[MAX_DIMENSION]; void Backtracking(int dimension) { if(solution is well-generated) { process solution return; } for( x = each value of current ...
- Combinations: 从n个不同元素中取出k个元素的组合。 - Subsets: 给定一组可能包含重复元素的整数数组,返回该数组所有可能的子集。 - Word Search: 给定一个m×n的二维字符网格board和一个单词(字符串)word,...