LeetCode 题解(164): Subsets

来源:互联网 发布:数据分析表怎么做 编辑:程序博客网 时间:2024/05/16 19:37

题目:

Given a set of distinct integers, nums, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • 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],  []]

题解:

Backtracing。

C++版:

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        vector<vector<int>> results;        vector<int> result;        results.push_back(result);        sort(nums.begin(), nums.end());        for(int i = 0; i < nums.size(); i++) {            result.push_back(nums[i]);            results.push_back(result);            subset(results, result, nums, i + 1);            result.pop_back();        }        return results;    }        void subset(vector<vector<int>>& results, vector<int>& result, vector<int>& nums, int i) {        if(i == nums.size())            return;        for(int j = i; j < nums.size(); j++) {            result.push_back(nums[j]);            results.push_back(result);            subset(results, result, nums, j+1);            result.pop_back();        }    }};

Java版:

public class Solution {    public List<List<Integer>> subsets(int[] nums) {        List<List<Integer>> results = new ArrayList<List<Integer>>();        results.add(new ArrayList<Integer>());        Arrays.sort(nums);        for(int i = 0; i < nums.length; i++) {            List<Integer> result = new ArrayList<>();            result.add(nums[i]);            List<Integer> temp = new ArrayList<>();            temp.addAll(result);            results.add(temp);            subset(nums, result, results, i + 1);            result.clear();        }        return results;    }        public void subset(int[] nums, List<Integer> result, List<List<Integer>> results, int i) {        if(i == nums.length)            return;        for(int j = i; j < nums.length; j++) {            result.add(nums[j]);            List<Integer> temp = new ArrayList<>();            temp.addAll(result);            results.add(temp);            subset(nums, result, results, j + 1);            result.remove(result.size() - 1);        }    }}

Python版:

import copyclass Solution:    # @param {integer[]} nums    # @return {integer[][]}    def subsets(self, nums):        nums.sort()        results, result = [[]], []        for i in range(len(nums)):            result.append(nums[i])            results.append(copy.copy(result))            self.subset(nums, results, result, i + 1)            result.pop()        return results                def subset(self, nums, results, result, i):        if i == len(nums):            return        for j in range(i, len(nums)):            result.append(nums[j])            results.append(copy.copy(result))            self.subset(nums, results, result, j + 1)            result.pop()

0 0
原创粉丝点击