【力扣刷题】2597. 美丽子集的数目-回溯、哈希表

给你一个由正整数组成的数组 nums 和一个  整数 k 

如果 nums 的子集中,任意两个整数的绝对差均不等于 k ,则认为该子数组是一个 美丽 子集。

返回数组 nums  非空  美丽 的子集数目。

nums 的子集定义为:可以经由 nums 删除某些元素(也可能不删除)得到的一个数组。只有在删除元素时选择的索引不同的情况下,两个子集才会被视作是不同的子集。

 

示例 1:

输入:nums = [2,4,6], k = 2
输出:4
解释:数组 nums 中的美丽子集有:[2], [4], [6], [2, 6] 。
可以证明数组 [2,4,6] 中只存在 4 个美丽子集。

示例 2:

输入:nums = [1], k = 1
输出:1
解释:数组 nums 中的美丽数组有:[1] 。
可以证明数组 [1] 中只存在 1 个美丽子集。 

 

提示:

  • 1 <= nums.length <= 18
  • 1 <= nums[i], k <= 1000

 

auto dfs=[&](this auto&&dfs, int i)->void{

};

class Solution {
public:
    int beautifulSubsets(vector<int>& nums, int k) {
        int ans=-1;
        unordered_map<int,int>cnt;
        auto dfs=[&](this auto&&dfs,int i)->void{
            if(i==nums.size()){
                ans++;
                return;
            }
            dfs(i+1);
            int x=nums[i];
            if(cnt[x-k]==0&&cnt[x+k]==0){
                cnt[x]++;
                dfs(i+1);
                cnt[x]--;
            }
        };
        dfs(0);
        return ans;
    }
};

 

版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/415
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录