题目
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],
[]
]
大致意思
给你一个数组,把这个数组拆分,给出有多少个可能性,并且列出来。
解决方案
这种问题,首先想到的就是利用递归去解决。
- 首先,声明一个数组,将空数组放进去
var array = [[]];
- 然后调用
combine
函数
combine([], nums.slice(0), array);
- 在
combine
函数里,我们将剩下的函数进行遍历
function combine(arr, nums, array) {
while (nums.length) {
var data = nums[0];
var arr_1 = arr.slice(0);
arr_1.push(data);
array.push(arr_1);
nums.shift();
combine(arr_1, nums.slice(0), array);
}
}
- 在
combine
函数里,arr
里表示需要进行添加的数组,nums
表示需要进行combine
的数组,array
表示最后返回进行push
的数组。
[1, 2, 3] --> ([1], [2, 3]) --> ([1, 2], [3]) --> ([1, 2, 3])
--> ([1, 3])
源代码
var subsets = function(nums) {
var array = [[]];
combine([], nums.slice(0), array);
return array;
};
function combine(arr, nums, array) {
while (nums.length) {
var data = nums[0];
var arr_1 = arr.slice(0);
arr_1.push(data);
array.push(arr_1);
nums.shift();
combine(arr_1, nums.slice(0), array);
}
}