0
点赞
收藏
分享

微信扫一扫

【Leetcode 每日一题】2597. 美丽子集的数目

腊梅5朵 03-11 06:00 阅读 11

问题背景

给你一个由正整数组成的数组 n u m s nums nums 和一个 整数 k k k
如果 n u m s nums nums 的子集中,任意两个整数的绝对差均不等于 k k k,则认为该子数组是一个 美丽 子集。
返回数组 n u m s nums nums非空美丽 的子集数目。
n u m s nums nums 的子集定义为:可以经由 n u m s nums nums 删除某些元素(也可能不删除)得到的一个数组。只有在删除元素时选择的索引不同的情况下,两个子集才会被视作是不同的子集。

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 18 1 \le nums.length \le 18 1nums.length18
  • 1 ≤ n u m s [ i ] , k ≤ 1000 1 \le nums[i], k \le 1000 1nums[i],k1000

解题过程

在求 子集 的基础上,额外去掉可能导致差值为 k k k 的情况即可。

具体实现

class Solution {
    private int res = -1;

    public int beautifulSubsets(int[] nums, int k) {
        Map<Integer, Integer> count = new HashMap<>();
        dfs(0, nums, k, count);
        return res;
    }

    private void dfs(int i, int[] nums, int k, Map<Integer, Integer> count) {
        if (i == nums.length) {
            res++;
            return;
        }
        dfs(i + 1, nums, k, count);
        int cur = nums[i];
        if (count.getOrDefault(cur - k, 0) == 0 && count.getOrDefault(cur + k, 0) == 0) {
            count.merge(cur, 1, Integer::sum);
            dfs(i + 1, nums, k, count);
            count.merge(cur, -1, Integer::sum);
        }
    }
}
举报

相关推荐

0 条评论