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 }