maskup
Senior Member
Python:
class Solution:
def beautifulSubsets(self, nums: List[int], k: int) -> int:
def beautifulSubsetsOfArithmeticSequence(sequence):
n = len(sequence)
dp = n * [0]
for i in range(n):
prev2 = dp[i - 2] if i - 2 >= 0 else 1
prev1 = dp[i - 1] if i - 1 >= 0 else 1
take = ((1 << counter[sequence[i]]) - 1) * prev2
notTake = prev1
dp[i] = take + notTake
return dp[n - 1]
counter = Counter(nums)
ans = 1
for num in counter:
if num - k not in counter: #num is the start of an arithmetic sequence
sequence = []
while num in counter:
sequence.append(num)
num += k
ans *= beautifulSubsetsOfArithmeticSequence(sequence)
return ans - 1 # "- 1" is to eliminate the empty set from the count