题解 | #集合的所有子集(一)#
集合的所有子集(一)
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
};