Numbers At Most N Given Digit Set
ID: 902
Given an array of digits
which is sorted in non-decreasing order. You can write numbers using each digits[i]
as many times as we want. For example, if digits = ['1','3','5']
, we may write numbers such as '13'
, '551'
, and '1351315'
.
Return the number of positive integers that can be generated that are less than or equal to a given integer n
.
Idea
If n is a K digit number, than all combinations of K-1 digit number from digits can be valid, therefore, assume digits has N elements, than possible combinations are N^1+N^2+...+N^(K-1)
For combination with K digits, start from the least significant bit of n, for example, if n=1234, digits = [1,2,3], then 1,2,3 all smaller than 4, fit--> 1,2 smaller than 3, so for any combination on the 4th digit place, fit (11,12,13,21,22,23), N^1 for 1 and N^1 for 2; for 3, equals 3, so only combinations that fit in 4th place can fit here, therefore, dp[i] += dp[i+1]
Then, by our reasoning above, dp[i] = (number of d in D with d < S[i]) * ((D.length) ** (K-i-1))
, plus dp[i+1]
if S[i]
is in D
.
Code
Last updated