lintcode-17-子集

子集

给定一个含不同整数的集合,返回其所有的子集

注意事项

子集中的元素排列必须是非降序的,解集必须不包含重复的子集

样例

如果 S = [1,2,3],有如下的解:

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

挑战

你可以同时用递归与非递归的方式解决么?

标签

递归 脸书 优步

code

class Solution {
public:
    /**
     * @param S: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    vector<vector<int> > subsets(vector<int> &nums) {
    	// write your code here
        vector<vector<int> > result;
        int size = nums.size();
        
        if(size == 0) {
            result.push_back(vector<int> ()); 
            return result; 
        }

        sort(nums.begin(),nums.end());

        vector<int> temp;
        subset(result, nums, temp, 0, size);

        return result;
    }

    void subset(vector<vector<int> > &result, vector<int> nums, vector<int> temp, int begin, int end) {
        result.push_back(temp);

        for(int i=begin; i<end; i++) {
            temp.push_back(nums[i]);
            subset(result, nums, temp, i+1, end);
            temp.pop_back();
        }
    }
};
posted @ 2017-06-12 16:11  LiBaoquan  阅读(247)  评论(0编辑  收藏  举报