首页 > 试题广场 >

集合的所有子集(二)

[编程题]集合的所有子集(二)
  • 热度指数:3105 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个整数数组 nums ,其中可能包含重复元素,请你返回这个数组的所有可能子集。

返回的答案中不能包含重复的子集,将答案按字典序进行排序。

数据范围:数组长度满足 ,数组中元素大小满足
示例1

输入

[1,2]

输出

[[],[1],[1,2],[2]]
示例2

输入

[1]

输出

[[],[1]]
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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
};
发表于 2022-04-24 12:15:35 回复(0)

问题信息

难度:
3条回答 2370浏览

热门推荐

通过挑战的用户

查看代码