代码拉取完成,页面将自动刷新
import java.util.ArrayList;
import java.util.Arrays;
/*
* @lc app=leetcode.cn id=77 lang=java
*
* [77] 组合
*
* https://leetcode-cn.com/problems/combinations/description/
*
* algorithms
* Medium (73.59%)
* Likes: 266
* Dislikes: 0
* Total Accepted: 50.3K
* Total Submissions: 68.4K
* Testcase Example: '4\n2'
*
* 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
*
* 示例:
*
* 输入: n = 4, k = 2
* 输出:
* [
* [2,4],
* [3,4],
* [2,3],
* [1,2],
* [1,3],
* [1,4],
* ]
*
*/
// @lc code=start
class Solution {
List<List<Integer>> result = new ArrayList();
List<List<Integer>> res;
public List<List<Integer>> combine(int n, int k) {
// 解法1:回溯
res = new ArrayList();
List<Integer> track = new ArrayList<>();
backtrack(n, k, 1, track);
return res;
// // 解法2:
// List<List<Integer>> result = new ArrayList<List<Integer>>();
// int i = 0;
// int[] p = new int[k];
// while (i >= 0) {
// p[i]++;
// if (p[i] > n) --i;
// else if (i == k - 1) result.add(Arrays.stream(p).boxed().collect(Collectors.toList()));
// else {
// ++i;
// p[i] = p[i - 1];
// }
// }
// return result;
}
public void backtrack(int n, int k, int start, List<Integer> track) {
if (k == track.size()) {
res.add(new ArrayList<Integer>(track));
return;
}
for (int i = start; i <= n; i++) {
track.add(i);
backtrack(n, k, i + 1, track);
track.remove(track.size() - 1);
}
}
}
// @lc code=end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。