Numbers At Most N Given Digits
ID:902
Input: digits = ["1","3","5","7"], n = 100
Output: 20
Explanation:
The 20 numbers that can be written are:
1, 3, 5, 7, 11, 13, 15, 17, 31, 33, 35, 37, 51, 53, 55, 57, 71, 73, 75, 77.Idea
Code
public int atMostNGivenDigitSet(String[] digits, int n) {
String s = String.valueOf(n);
int K = s.length();
int res = 0;
int numD = digits.length;
for(int i = 1; i<K; i++){
res+=Math.pow(numD, i);
}
int[] dp = new int[K+1];
dp[K] = 1;
for(int i=K-1; i>=0; i--){
int si = s.charAt(i)-'0';
for(String d: digits){
if(Integer.valueOf(d)<si){
dp[i]+=Math.pow(digits.length, K-1-i);
}
else if(Integer.valueOf(d)==si){
dp[i]+=dp[i+1];
}
}
}
return res+dp[0];
}Last updated