The Number of Beautiful Subsets

MediumArrayHash TableMathDynamic ProgrammingBacktrackingSortingCombinatorics

Solution

export function beautifulSubsets(nums: number[], k: number): number {
  let answer = 0;
  const n = nums.length;
  const map = new Map<number, number>();
  function backtrack(i: number) {
    if (i === n) {
      answer += 1;
      return;
    }
 
    const num = nums[i];
    if (!map.has(num - k) && !map.has(num + k)) {
      map.set(num, (map.get(num) ?? 0) + 1);
      backtrack(i + 1);
      map.set(num, (map.get(num) ?? 0) - 1);
      if (map.get(num) === 0) {
        map.delete(num);
      }
    }
 
    backtrack(i + 1);
  }
  backtrack(0);
  return answer - 1;
}