diff --git a/go/the-number-of-beautiful-subsets.go b/go/the-number-of-beautiful-subsets.go new file mode 100644 index 0000000..1ef7534 --- /dev/null +++ b/go/the-number-of-beautiful-subsets.go @@ -0,0 +1,32 @@ +package the_number_of_beautiful_subsets + +import ( + "slices" +) + +func beautifulSubsets(nums []int, k int) int { + seen := make(map[int]int) + + var dfs func(int, int) int + dfs = func(lastNum, i int) int { + // BASE: Got to the end of the slice + if i >= len(nums) { + return 1 + } + + // Initialize with skipping the current number + foundSubsets := dfs(lastNum, i+1) + + // Check if we can include the current number + if seen[nums[i]-k] == 0 && seen[nums[i]+k] == 0 { + seen[nums[i]] += 1 + foundSubsets += dfs(nums[i], i+1) + seen[nums[i]] -= 1 + } + + return foundSubsets + } + + slices.Sort(nums) + return dfs(nums[0]-k-1, 0) - 1 +}