题目描述:

给定一组不含重复元素的整数数组 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. ]

算法实现:

  1. /**
  2. * @param {number[]} nums
  3. * @return {number[][]}
  4. */
  5. var subsets = function(nums) {
  6. var res = [[]];
  7. for (var i = 0; i < nums.length; i++ ) {
  8. for (var j = 0; j < res.length; j++ ) {
  9. res.push(res[j].concat([nums[i]]))
  10. }
  11. }
  12. return res
  13. };

思考:

在看到这道题之前,我们来思考一下子集的本质是什么,子集即是把这个集合中的每个元素以要么选要么不选的方式加入到每一个子集当中,所以,我们可以通过循环将res里的元素和nums里的元素拼接起来,从而实现这道题目。

总结:

也可以应用回溯法解决,值得思考。