首页 > 其他 > 详细

Leetcode题解(25)

时间:2016-02-01 18:17:48      阅读:110      评论:0      收藏:0      [点我收藏+]

77. Combinations

题目

技术分享

分析:求给定数字n,k的组合数,方法是采用深度搜索算法,代码如下(copy网上代码)

 1 class Solution {
 2 public:
 3     void dfs77(vector<vector<int > > &ans, vector<int> subans, int start, int n, int k)
 4     {
 5         if (subans.size() == k)
 6         {
 7             ans.push_back(subans); return ;
 8         }
 9         for (int i = start; i <= n; i++)
10         {
11             subans.push_back(i);
12             dfs77(ans, subans, i + 1, n, k);
13             subans.pop_back(); // 满足一个条件或者该分支递归完后要删除最后一个
14         }
15     }
16     vector<vector<int> > combine(int n, int k) {
17         vector<vector<int > > ans;
18         if (n < k || k == 0) return ans;
19         vector<int> subans;
20         dfs77(ans, subans, 1, n, k);
21         return ans;
22     }
23 };

 --------------------------------------------------------------------------------分割线------------------------------------------------------------------

78. Subsets

题目

技术分享

分析:求一个集合的所有子集,代码如下(copy网上代码)

 1 class Solution {
 2 public:
 3     vector<vector<int>>res;
 4     vector<int>ans;
 5     vector<vector<int>> subsets(vector<int>& nums) {
 6         if(nums.empty()) return res;
 7         sort(nums.begin(), nums.end());
 8         dfs(0, ans, nums);
 9         return res;
10      
11     }
12     void dfs(int k, vector<int>ans, vector<int> nums){
13         res.push_back(ans);
14         for(int i = k; i < nums.size(); i++){
15             ans.push_back(nums[i]);
16             dfs(i + 1, ans, nums);
17             ans.pop_back();
18         }
19     }
20 };

 

Leetcode题解(25)

原文:http://www.cnblogs.com/LCCRNblog/p/5175677.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!