78. 子集
2019-08-06 11:08 前端小白的江湖路 閱讀(100) 評論(0) 收藏 舉報問題
給定一組不含重復元素的整數數組 nums,返回該數組所有可能的子集(冪集)。
說明:解集不能包含重復的子集。
示例:
輸入: nums = [1,2,3]
輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解法1
以常規思維來思考,先找出個數為1,然后個數為2,然后個數為3的
/** * @param {number[]} nums * @return {number[][]} */ var subsets = function(nums) { let result = [[], ], start, end; for(let i=0; i<nums.length; ++i) { result.push([nums[i]]); } start = 1, end = result.length-1; for(let m = 0; m<nums.length-1; ++m) { end = result.length - 1; while(start <= end) { let n = nums.indexOf(result[start][result[start].length-1]) + 1; for(let i=n; i<nums.length; ++i) { result.push([...result[start], nums[i]]); } start++; } } return result; };
例如輸入[1, 2, 3] ,輸出為[[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
解法二
每次新加入一個元素,然后與前面的元素組合
var subsets = function (nums) { let result = [[]]; for(let i=0; i<nums.length; ++i) { let len = result.length; for(let j=0; j<len; ++j) { result.push([...result[j], nums[i]]); } } return result; }
浙公網安備 33010602011771號