两种方法
    子集是求组合数。46题 47题是求排列数
    image.png

    第一种循环

    1. class Solution {
    2. public:
    3. vector<vector<int>> subsets(vector<int>& nums) {
    4. vector<vector<int>> res;
    5. res.push_back({});
    6. for(auto x: nums)
    7. {
    8. int len = res.size();
    9. for(int i = 0; i < len; i++)
    10. {
    11. auto tmp = res[i];
    12. tmp.push_back(x);
    13. res.push_back(tmp);
    14. }
    15. }
    16. return res;
    17. }
    18. };

    第二次写题

    1. class Solution {
    2. public:
    3. vector<vector<int>> subsets(vector<int>& nums) {
    4. vector<vector<int>> res;
    5. res.push_back({});
    6. for(int i = 0; i < nums.size(); i++)//遍历每一个数字
    7. {
    8. int n = res.size();
    9. for(int j = 0; j < n; j++)
    10. {
    11. vector<int> tmp = res[j];
    12. tmp.push_back(nums[i]);
    13. res.push_back(tmp);
    14. }
    15. }
    16. return res;
    17. }
    18. };

    第二种dfs

    1. class Solution {
    2. vector<vector<int>> res;
    3. vector<int> nums;
    4. void dfs(long long idx)
    5. {
    6. if(idx == nums.size())
    7. return;
    8. int len = res.size();
    9. for(int i = 0; i < len; i++)
    10. {
    11. auto tmp = res[i];
    12. tmp.push_back(nums[idx]);
    13. res.push_back(tmp);
    14. }
    15. dfs(idx + 1);
    16. }
    17. public:
    18. vector<vector<int>> subsets(vector<int>& _nums) {
    19. nums = _nums;
    20. res.push_back({});
    21. dfs(0);
    22. return res;
    23. }
    24. };

    第三次写题

    1. class Solution {
    2. public:
    3. vector<vector<int>> subsets(vector<int>& nums) {
    4. vector<vector<int>> res = {{}};
    5. for(int i = 0; i < nums.size(); i++)
    6. {
    7. int len = res.size();
    8. for(int j = 0; j < len; j++)
    9. {
    10. auto tmp = res[j];
    11. tmp.push_back(nums[i]);
    12. res.push_back(tmp);
    13. }
    14. }
    15. return res;
    16. }
    17. };