<p>You are given an array <code>nums</code> of positive integers and a <strong>positive</strong> integer <code>k</code>.</p>

<p>A subset of <code>nums</code> is <strong>beautiful</strong> if it does not contain two integers with an absolute difference equal to <code>k</code>.</p>

<p>Return <em>the number of <strong>non-empty beautiful </strong>subsets of the array</em> <code>nums</code>.</p>

<p>A <strong>subset</strong> of <code>nums</code> is an array that can be obtained by deleting some (possibly none) elements from <code>nums</code>. Two subsets are different if and only if the chosen indices to delete are different.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,4,6], k = 2
<strong>Output:</strong> 4
<strong>Explanation:</strong> The beautiful subsets of the array nums are: [2], [4], [6], [2, 6].
It can be proved that there are only 4 beautiful subsets in the array [2,4,6].
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [1], k = 1
<strong>Output:</strong> 1
<strong>Explanation:</strong> The beautiful subset of the array nums is [1].
It can be proved that there is only 1 beautiful subset in the array [1].
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 20</code></li>
	<li><code>1 &lt;= nums[i], k &lt;= 1000</code></li>
</ul>

class Solution:
    def beautifulSubsets(self, nums: List[int], k: int) -> int:
        def backtrack(start, current_subset):
            nonlocal count
            
            # Only count non-empty subsets
            if current_subset:
                count += 1
            
            for i in range(start, len(nums)):
                # Check if current element nums[i] can be added to the current_subset
                can_add = True
                for num in current_subset:
                    if abs(num - nums[i]) == k:
                        can_add = False
                        break
                        
                if can_add:
                    # Include nums[i] in the subset and proceed
                    current_subset.append(nums[i])
                    backtrack(i + 1, current_subset)
                    # Backtrack: remove the last added element
                    current_subset.pop()
        
        nums.sort()  # Sorting to make the checking more efficient
        count = 0
        backtrack(0, [])
        return count
        
16800