2018-10-01-weekly
Algorithm
-
What 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
-
How 利用递归的思想,当凑够k个数时,就回退回去,remove掉一个数,在进行组合 。
-
Key Codes
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (k > n)
{
return res;
}
List<Integer> list = new ArrayList<Integer>();
getComb(n, k, list, res, 1);
return res;
}
public void getComb(int n, int k, List<Integer> list, List<List<Integer>> ret, int start)
{
if (list.size() == k)
{
ret.add(new ArrayList<Integer>(list));
return;
}
int len = list.size();
for (int i = start; i <= n; i++)
{
if (n - i < (k - len-1))
{
return;
}
list.add(i);
getComb(n, k, list, ret, i + 1);
list.remove(list.size() - 1);
}
}
}
Review
- What 学习如何学习,遇到挫折怎么办?
- How 不要放弃!“生命中的一切都有解决,除了死亡”所以享受你的生活,学习你所爱的东西。
- 请求帮忙
- 多社交
- 好好学数学
- 多阅读
Tip
- What 如何快速停止一个处于睡眠状态的线程?
- How 通过pthread_cond_wait实现睡眠函数,通过pthread_cond_signal来快速停止睡眠