难度:中等

    题目描述:
    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
    说明:解集不能包含重复的子集。

    示例:

    1. 输入: nums = [1,2,3]
    2. 输出:
    3. [
    4. [3],
    5. [1],
    6. [2],
    7. [1,2,3],
    8. [1,3],
    9. [2,3],
    10. [1,2],
    11. []
    12. ]

    解题思路:
    image.png

    1. var subsets = function(nums) {
    2. let ws = [[]];
    3. for(let i=0; i < nums.length; ++i) {
    4. for(let j=0, len = ws.length; j < len; ++j) {
    5. ws.push(ws[j].concat([nums[i]]));
    6. }
    7. }
    8. return ws;
    9. };

    回朔算法

    1. var subsets = function(nums) {
    2. let n = nums.length;
    3. let tmpPath = [];
    4. let res = [];
    5. let backtrack = (tmpPath,start) => {
    6. res.push(tmpPath);
    7. for(let i = start;i < n;i++){
    8. tmpPath.push(nums[i]);
    9. backtrack(tmpPath.slice(),i+1);
    10. tmpPath.pop();
    11. }
    12. }
    13. backtrack(tmpPath,0);
    14. return res;
    15. };