★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9933967.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]
8ms
1 class Solution {
2 func subsets(_ nums: [Int]) -> [[Int]] {
3 var res = [[Int]()]
4 subset(&res, nums)
5 return res
6 }
7
8 private func subset(_ res: inout [[Int]], _ nums: [Int]) {
9 guard let n = nums.first else { return }
10 res += res.map { $0 + [n] }
11 subset(&res, Array(nums[1..<nums.count]))
12 }
13 }
12ms
1 class Solution {
2 func subsets(_ nums: [Int]) -> [[Int]] {
3 if nums.count &#61;&#61; 0 {
4 return []
5 }
6
7 var result &#61; [[Int]]()
8 var subset &#61; [Int]()
9 //call backtracking
10 backtracking(nums, &result, &subset, 0)
11 return result
12 }
13
14 func backtracking(_ nums: [Int], _ result: inout [[Int]], _ subset: inout [Int], _ startIndex: Int) {
15 result.append(subset)
16 for i in startIndex..<nums.count {
17 subset.append(nums[i])
18 backtracking(nums, &result, &subset, i &#43; 1)
19 subset.removeLast()
20 }
21 }
22 }
12ms
1 class Solution {
2 func subsets(_ nums: [Int]) -> [[Int]] {
3 var res &#61; [[Int]]()
4 rec_subset([Int](), nums, &res)
5 res.append([Int]())
6 return res
7 }
8
9 func rec_subset(_ firstNums: [Int], _ restNum: [Int], _ res: inout [[Int]]) {
10 if restNum.count &#61;&#61; 0 {
11 if firstNums.count !&#61; 0 {
12 res.append(firstNums)
13 }
14 return
15 }
16
17 var tempRestNums &#61; restNum;
18 var tempFirstNums &#61; firstNums;
19 let firstVal &#61; tempRestNums.remove(at: 0)
20 tempFirstNums.append(firstVal)
21 rec_subset(tempFirstNums, tempRestNums, &res)
22
23 var zeroFirstNums &#61; firstNums;
24 rec_subset(zeroFirstNums, tempRestNums, &res)
25 }
26 }
16ms
1 class Solution {
2 var result &#61; [[Int]]()
3 func subsets(_ nums: [Int]) -> [[Int]] {
4 let count &#61; nums.count
5 for i in 0...count {
6 var changeArray &#61; Array(repeatElement(0, count: i))
7 combine(&changeArray, nums, 0, i, 0, count)
8 }
9 return result
10 }
11
12 func combine(_ combineArray: inout [Int], _ nums: [Int], _ i: Int, _ total: Int, _ j: Int, _ maxJ: Int) {
13 if i &#61;&#61; total {
14 result.append(combineArray)
15 return ;
16 }
17
18 for k in j..<maxJ {
19 combineArray[i] &#61; nums[k]
20 combine(&combineArray, nums, i &#43; 1, total, k &#43; 1, maxJ)
21 }
22 }
23 }
16ms
1 class Solution {
2 func subsets(_ nums: [Int]) -> [[Int]] {
3 guard nums.count > 0 else {return []}
4 var subsets &#61; [[Int]]()
5 subsets.append([])
6
7 for num in nums {
8 subsets &#43;&#61; subsets.map{$0 &#43; [num]}
9 }
10 return subsets
11 }
12 }
28ms
1 class Solution {
2 func subsets(_ nums: [Int]) -> [[Int]] {
3 if nums.isEmpty {
4 return []
5 }
6
7 var res: [[Int]] &#61; [[]]
8 helper(nums, &res)
9 return res
10 }
11
12 fileprivate func helper(_ nums: [Int], _ res: inout [[Int]]) {
13
14 guard let first &#61; nums.first else {
15 return
16 }
17
18 res &#43;&#61; res.map{$0 &#43; [first]}
19 helper(Array(nums[1..
20 }
21 }