14
vector<int> getDigits(int n) {17
digits.push_back(n % 10);21
reverse(digits.begin(), digits.end());25
int solve(int idx, bool flag, vector<int> &digits, vector<int> &number) {28
for (int i = idx; i < number.size(); i++) {34
if (idx >= number.size()) return 1;38
for (int dig : digits) {39
if (dig < number[idx]) {40
curr += solve(idx + 1, false, digits, number);41
} else if (dig == number[idx]) {42
curr += solve(idx + 1, true, digits, number);50
int atMostNGivenDigitSet(vector<string> &digits, int n) {51
int len = countLen(n);53
for (string str : digits) {54
nums.push_back(stoi(str));56
sort(nums.begin(), nums.end());59
for (int i = 1; i < len; i++) {62
for (int j = 0; j < i; j++) {64
curr *= (int)digits.size();66
if (flag) res += curr;69
vector<int> number = getDigits(n);71
res += solve(0, true, nums, number);