给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
例子:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
输入:nums = [0]
输出:[[],[0]]
解题思路:
重点要理解个这个
多一个新元素, 相当于在原来每个元素形成旧数组里面多加个新元素
例如:
-
给定数组为: [1, 2]
结果: [1], [1, 2], [2] -
给定数组为: [1, 2, 3]
结果: [1], [1, 2], [1, 3], [1, 2, 3], [2], [2, 3], [3]
相对于之前的 [1], [1, 2], [2]
是不是只多出了[1, 3], [1, 2, 3], [2, 3], [3]
其他同理, 按照这个规律我们有
代码:
未翻译版
func subsets(_ nums: [Int]) -> [[Int]] {
var result = [[Int]]()
for i in nums {
let temp = [i]
for arr in result {
result.append(arr + temp)
}
result.append(temp)
}
result.append([])
return result
}
翻译版
func subsets(_ nums: [Int]) -> [[Int]] {
// 定义数组为每次循环之后的结果数组
var result = [[Int]]()
// 循环num中每一个元素
for i in nums {
// 定义temp为当前 新元素形成的单一数组
let temp = [i]
// 循环上一轮形成的数组
for arr in result {
// 上一轮每一个数组拼接个新元素添加进新数组
result.append(arr + temp)
}
// 新元素形成的单一数组别忘记添加
result.append(temp)
}
// 最后添加空数组
result.append([])
// 返回结果
return result
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论