给定一个整数数组 nums ,其中可能包含重复元素,请你返回这个数组的所有可能子集。
返回的答案中不能包含重复的子集,将答案按字典序进行排序。
数据范围:数组长度满足
,数组中元素大小满足 
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型二维数组
*/
let result=[],path=[],visited=[];
function subsets( nums ) {
// write code here
nums.sort(function(a,b){
return a-b;
})
backTrace(nums,nums.length,0);
return result;
}
function backTrace(n,k,start){
result.push([...path]);
for(let i=start;i<k;i++){
// 增加访问标记visited,避免[1,1,1] 重复元素重复添加
if(i>start && n[i]==n[i-1]) continue; // 满足条件继续
// if(i > 0 && n[i]==n[i-1] && !visited[i-1]) continue;
path.push(n[i]);
// visited[i]=1; // 节点被访问
backTrace(n,k,i+1);
path.pop();
// visited[i]=0; // 节点访问标记置0
}
}
module.exports = {
subsets : subsets
};