[Swift]LeetCode78. 子集 | Subsets

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 == 0 {
 4             return []
 5         }
 6
 7         var result = [[Int]]()
 8         var subset = [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 + 1)
19             subset.removeLast()
20         }
21     }
22 }


12ms

 1 class Solution {
 2     func subsets(_ nums: [Int]) -> [[Int]] {
 3         var res = [[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 == 0 {
11             if firstNums.count != 0 {
12                 res.append(firstNums)
13             }
14             return
15         }
16
17         var tempRestNums = restNum;
18         var tempFirstNums  = firstNums;
19         let firstVal = tempRestNums.remove(at: 0)
20         tempFirstNums.append(firstVal)
21         rec_subset(tempFirstNums, tempRestNums, &res)
22
23         var zeroFirstNums = firstNums;
24         rec_subset(zeroFirstNums, tempRestNums, &res)
25     }
26 } 


16ms

 1 class Solution {
 2     var result = [[Int]]()
 3     func subsets(_ nums: [Int]) -> [[Int]] {
 4         let count = nums.count
 5         for i in 0...count {
 6             var changeArray = 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 == total {
14             result.append(combineArray)
15             return ;
16         }
17
18         for k in j..<maxJ {
19             combineArray[i] = nums[k]
20             combine(&combineArray, nums, i + 1, total, k + 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 = [[Int]]()
 5         subsets.append([])
 6
 7         for num in nums {
 8             subsets += subsets.map{$0 + [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]] = [[]]
 8         helper(nums, &res)
 9         return res
10     }
11
12     fileprivate func helper(_ nums: [Int], _ res: inout [[Int]]) {
13
14         guard let first = nums.first else {
15             return
16         }
17
18         res += res.map{$0 + [first]}
19         helper(Array(nums[1..<nums.count]), &res)
20     }
21 }

原文地址:https://www.cnblogs.com/strengthen/p/9933967.html

时间: 2024-08-30 00:44:08

[Swift]LeetCode78. 子集 | Subsets的相关文章

《R in Nutshell》 读书笔记(连载)

R in Nutshell 前言 例子(nutshell包) 本书中的例子包括在nutshell的R包中,使用数据,需加载nutshell包 install.packages("nutshell") 第一部分:基础 第一章 批处理(Batch Mode) R provides a way to run a large set of commands in sequence and save the results to a file. 以batch mode运行R的一种方式是:使用系统

递归Recursion举例

#GCD最大公约数 1 //求a和b的最大公约数 2 int GCD(int a, int b) 3 { 4 if (a % b == 0) 5 return b; 6 else 7 return GCD(b, a % b); 8 } #翻转字符串 1 string reverseString(string str) 2 { 3 if (str.length() == 0) 4 return ""; 5 else 6 return reverseString(str.substr(1)

【机器学习中的数学】从西格玛代数、测度空间到随机变量

σ代数 令X是一个样本空间(sample space)Ω的所有子集(subsets)的集合的一个子集,那么集合X被称为σ代数(σ-algebra)又叫σ域(σ-field). 它有以下几个性质: (1)Φ∈X:(Φ为空集) (2)若A∈X,则A的补集A^c∈X: (3)若Ai∈X(i=1,2,-)则∪Ai∈X: 可测空间 Ω是任意集合,而X是把Ω中的极端情况去掉后又Ω的子集组成的集合,这样剩下的就是可以处理的集合,所以(Ω,X)称为可测空间(a measurable set).X满足σ代数的三个

uml精粹——1.介绍 &amp; 2.开发过程

1.介绍 [使用uml的方式] 把uml当做草图sketch.顺向工程forward engineering在写代码前会绘制uml.而逆向工程reverse engineering根据已有的代码绘制uml来帮助理解. 把uml当做设计图blueprint是为了完整性completeness.在顺向工程中工作是构建详细设计的设计师会绘制设计图来让程序员更好的写代码实现.这个设计需要足够完整,里面所有的设计决策design decisions都被列出laid out,让程序员能够轻松的照着做而只需要

Istio v1aplha3 路由 API

先来看看Nginx 的虚拟机配置 upstream test_app { server 127.0.0.1:5000; } server { listen 127.0.0.1:80; location / { proxy_pass http://test_app; } } 对于nginx的虚拟机配置,正常应该有下面三个东西 upstream : 指定代理后端应用服务地址 server : 配置指定主机,端口 location : 路由指定允许访问的url地址 Istio v1aplha3 路由

[Istio]流量管理API v1alpha3路由规则

Istio提供一个API进行流量管理,该API允许用户将请求路由到特定版本的服务,为弹性测试注入延迟和失败,添加断路器等,所有这些功能都不必更改应用程序本身的代码.Istio 1.0中引入新的流量管理API v1alpha3,新版本API将完全取代之前的API,并不向后兼容. 设计原则 1)除支持声明式(意图)配置外,也支持显示指定模型依赖的基础设施.例如除了配置入口网管的功能特性以外,负责实现入口网管功能的组件(Controller)也可以在模型指定 2)编写模型时应该"生产者导向"

图、dfs、bfs

graphdfsbfs 1.clone graph2.copy list with random pointer3.topological sorting4.permutations5.subsets6.n queens7.subsetsII 8.palindrome partitioning9.combination sum10.combination sumII11.word ladder 12.word ladderII 克隆图:先克隆点,再克隆边. 宽度优先搜索有模板,以后告诉了图中的一

[Swift]LeetCode698. 划分为k个相等的子集 | Partition to K Equal Sum Subsets

Given an array of integers nums and a positive integer k, find whether it's possible to divide this array into k non-empty subsets whose sums are all equal. Example 1: Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4 Output: True Explanation: It's possible

Subsets II [leetcode] 从获取子集的递归和循环方法说起,解决重复子集的问题

这一题和Permutation II很像,一个是排列一个是组合. 我们理清思路,从最基本的获取子集的方法开始分析: 获取子集总的来说可以用循环或者递归做,同时还可以根据数字对应的binary code得到. 例如s = {x,y,z}可以生成的组合有:x,y,z,xy,yz,xz,xyz,0 第一种思路: 1. 维护一个集合Set(i),包含s[0...i]可生成的所有组合 s[0...i+1]可以生成的所有组合为:Set(i) + (Set(i)+s[i+1]) void permutatio