集合问题看作回溯中的多叉树深度优先遍历,关键部分是二维数组头部的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
};