zoukankan      html  css  js  c++  java
  • leetcode刷题笔记七十八题 子集

    leetcode刷题笔记七十八题 子集

    源地址:78. 子集

    问题描述:

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

    说明:解集不能包含重复的子集。

    示例:

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

    /**
    本题与前一题组合思路基本一致,使用回溯法
    需要注意的是本题是求k = 1 to n 的组合问题即可
    */
    import scala.collection.mutable
    object Solution {
        def subsets(nums: Array[Int]): List[List[Int]] = {
            val length = nums.length
            if(length == 0) return List()
    
            val path = mutable.ListBuffer[Int]()
            val res = mutable.ListBuffer[List[Int]]()
            
            for (i <- 1 to length){
                dfs(nums, i, 0, path, res)
            }
        
            return List()::res.toList
        }
    
        def dfs(nums: Array[Int], depth: Int, index: Int, path: mutable.ListBuffer[Int], res: mutable.ListBuffer[List[Int]]): Unit = {
            if(path.length == depth){
                res += path.toList
                return
            }
            for(i <- index to nums.length - (depth - path.length)){
                path += nums(i)
                dfs(nums, depth, i+1, path, res)
                path -= nums(i)
            }
        }
    }
    
  • 相关阅读:
    Split Temporary Variable
    Introduce Explaining Variable
    Replace Temp with Query
    Extract Method
    自测代码的价值
    代码的坏味道
    Divergent Change & Shotgun Surgery
    Large Class
    Long Method
    Duplicated Code
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13367462.html
Copyright © 2011-2022 走看看