Numbers At Most N Given Digit Set

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';

}

}

Comments (0)