How to approach this question when 0 is also included in the digit set . My solution is giving wrong anser for this.
proble link;https://leetcode.com/problems/numbers-at-most-n-given-digit-set/
#include<bits/stdc++.h>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long int
ll s1(vector<string> &v, ll N)
{
ll i, j, n = v.size(), ans = 0;
string ss = "", s = "";
for (i = 0; i < n; i++)
{
s += v[i];
}
ss = to_string(N);
ll d = ss.length(), f = 0;
// for numbers with atmost (d-1) digits we have n choices for each position
for (i = 1; i < d; i++)
{
if (i == 1)
{
ans += pow(n - 1, i);
continue;
}
ans += pow(n, i);
}
ll z = 0;
for (j = 0; j < d; j++)
{
f = 0; //to check whether that particular digit of N exists in the given string or not
for (i = 0; i < s.length(); i++)
{
if (z == 0)
{
z++;
continue;
}
//if a digit less than the current digit is encountered, we have 'n' possibilites for each digit to the right of 'i'
if (s[i] < ss[j])
{
ans += pow(n, d - (j + 1));
z++;
}
else if (s[i] == ss[j])
{
z++;
f = 1;
break;
}
}
if (!f)
{
break;
} //if we do not have jth digit in 's' , no need to continue
}
ans += f;
return ans;}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll l, r;
ll k, i, g;
cin >> l ;
vector<ll> v1;
ll x = 0;
while (x <= 9)
{
v1.push_back(x);
x = x + k;
}
vector<string> s;
for (i = 0; i < v1.size(); i++)
{
g = v1[i];
char c = g + '0';
string d(1, c);
s.push_back(d);
// cout << D[i] << " ";
}
cout << s1(l) << '\n';
}}