全排列与组合问题

1、全排列

 1 class Solution 
 2 {
 3 public:
 4     int n;
 5     vector<bool> st;
 6     vector<vector<int>> ans;
 7     vector<int> path;
 8 
 9     vector<vector<int>> permute(vector<int>& nums) 
10     {
11         n = nums.size();
12         st = vector<bool>(n,false);
13 
14         dfs(nums,0);
15 
16         return ans;
17     }
18 
19     void dfs(vector<int>& nums,int u)
20     {
21         if(u == n)
22         {
23             ans.push_back(path);
24             return;
25         }
26         for(int i = 0;i < n;i++)
27         {
28             if(!st[i])
29             {
30                 st[i] = true;
31                 path.push_back(nums[i]);
32                 dfs(nums,u + 1);
33 
34                 path.pop_back();
35                 st[i] = false;
36             }
37         }
38     }
39 };

2、组合

 1 void helper(vector<int>& nums, int start, vector<int>& out, vector<vector<int> >& res)
 2 {
 3     res.push_back(out);
 4     for (int i = start; i < nums.size(); ++i)
 5     {
 6         out.push_back(nums[i]);
 7         helper(nums, i + 1, out, res);
 8         out.pop_back();
 9     }
10 }

 

posted @ 2020-03-16 10:32  Jinxiaobo0509  阅读(108)  评论(0)    收藏  举报