LeetCode随笔之backtracking

来源:互联网 发布:1977特纳里夫空难 知乎 编辑:程序博客网 时间:2024/06/02 03:22
  1. 给一个序列,举出所有不重复的子序列的组合
    Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        vector<vector<int>> subs;        vector<int> sub;        getSubs(nums,sub,subs,0);        return subs;    }    void getSubs(vector<int> &nums,vector<int> &sub,vector<vector<int>> &subs,int start){        subs.push_back(sub);        for(int i=start;i<nums.size();i++){            sub.push_back(nums[i]);            getSubs(nums,sub,subs,i+1);            sub.pop_back();        }    }};//results

这里写图片描述

//竟然可以用迭代!class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        sort(nums.begin(), nums.end());        vector<vector<int>> subs(1, vector<int>());        for (int i = 0; i < nums.size(); i++) {            int n = subs.size();            for (int j = 0; j < n; j++) {                //把已有的前面的序列逐一pushback到后面。                subs.push_back(subs[j]);                 //再在每一个序列的基础上,把新的数据加入。                subs.back().push_back(nums[i]);            }        }        return subs;    }}; 

这里写图片描述

原创粉丝点击