IOS 算法(中级篇) ----- 子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

例子:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

输入:nums = [0]
输出:[[],[0]]

解题思路:

重点要理解个这个

多一个新元素, 相当于在原来每个元素形成旧数组里面多加个新元素

例如:

  1. 给定数组为: [1, 2]
    结果: [1], [1, 2], [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 算法合集地址

你可能感兴趣的