https://leetcode.com/problems/numbers-at-most-n-given-digit-set/
class Solution:
    def atMostNGivenDigitSet(self, digits: List[str], n: int) -> int:
        def count_numbers(number):
            if int(number) > n: return 0
            counts = sum([count_numbers(number + d) for d in digits])
            return 1 + counts
        
        return sum([count_numbers(d) for d in digits])
        
assert Solution().atMostNGivenDigitSet(["1","3","5","7"], 100) == 20