1. 题目
给定两个整数 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
简单的回溯算法
class Solution {
public:vector<vector<int>> combine(int n, int k) {vector<vector<int>> ans;vector<int> subset;bt(1, n, 0, k, subset, ans);return ans;}void bt(int i, int n, int count, int k, vector<int> &subset, vector<vector<int>>& ans){if(count == k){ans.push_back(subset);return;}if(n-i+1 < k-count)return;//剩余的个数不够了for(int j = i; j <= n; ++j){subset.push_back(j);bt(j+1,n,count+1,k,subset, ans);subset.pop_back();}}
};
12 ms 9.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!