题解 | #集合的所有子集(一)#

集合的所有子集(一)

http://www.nowcoder.com/practice/c333d551eb6243e0b4d92e37a06fbfc9

集合问题看作回溯中的多叉树深度优先遍历,关键部分是二维数组头部的index和走过的路径path for循环中的push和pop操作是对当前位的数字替换,bt回溯是增加位的操作

 * 
 * @param A int整型一维数组 
 * @return int整型二维数组
 */
 function subsets( A ) { 
  // write code here
  let res = []
  let path = [] //存放当前已选的数字
    function bt(idx) { //idx 记录当前指向的索引 
        res.push(path.slice()) 
         for(let i =idx;i<A.length;i++){ //索引以此向后移动表明以元素为首的数组集合
            path.push(A[i]) //当前(新)元素记录 
            bt(i+1) //当前已记录元素的基础上新增一位(深度)
            path.pop() //当前(新)元素已记录 出栈
         }
    }
    bt(0)  
  return  res
}

module.exports = {
  subsets : subsets
};
全部评论
感谢大佬
点赞 回复 分享
发布于 2022-06-02 17:16

相关推荐

程序员小白条:三方不签,不就是纯实习骗人吗,还是小公司,没毛了
点赞 评论 收藏
分享
钱嘛数字而已:辅导员肯定不能同意,不然你出事了,他要承担责任。但是,脚和脑子都长在你自己身上,使用它还需要向辅导员报告么? 辅导员必须按流程拒绝你,然后你拿出成年人的态度,做自己的选择。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务