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个数的所有可能组合。即从n个树种取出k个数,找出所有的取出可能。
思路:
方法一:
穷举出所有的可能,能想到用回溯递归法,找到所有满足条件的结果,不满足递归回溯,满足放入结果集,进行下一轮递归。
1 | /**************************************************************************************************************** |
方法二:
也是回溯递归法,但是此法代码效率高,效率高的主要原因就是方法一的递归循环中的控制条件考虑的不够细,不够到位,没有利用k这个元素个数来限制和降低循环次数。
1 | /**************************************************************************************************************** |
方法三:
和方法二相同,但是不是往vector中push_back()和pop_back()元素,利用数组下标索引,覆盖相应索引对应元素,减少vector的push_back()和pop_back()元素的时间消耗。所以此法代码效率由高一些。
1 | /**************************************************************************************************************** |
方法四:
非递归回溯法实现,即通过循环迭代法,但是效率不是很好。
1 | /**************************************************************************************************************** |
Java Code
1 | class Solution { |
1 | class Solution { |