using
System;
class
GFG{
static
int
[,]dp =
new
int
[15, 2];
static
String convertToString(
int
num)
{
return
String.Join(
""
,num);
}
static
int
calculate(
int
pos,
int
tight,
int
[]D,
int
sz, String num)
{
if
(pos == num.Length)
return
1;
if
(dp[pos,tight] != -1)
return
dp[pos,tight];
int
val = 0;
if
(tight == 0) {
for
(
int
i = 0; i < sz; i++) {
if
(D[i] < (num[pos] -
'0'
)) {
val += calculate(pos + 1,
1, D, sz, num);
}
else
if
(D[i] == num[pos] -
'0'
)
val += calculate(pos + 1,
tight, D, sz, num);
}
}
else
{
for
(
int
i = 0; i < sz; i++) {
val += calculate(pos + 1,
tight, D, sz, num);
}
}
return
dp[pos,tight] = val;
}
static
int
countNumbers(
int
[]D,
int
N,
int
sz)
{
String num = convertToString(N);
int
len = num.Length;
for
(
int
i = 0; i < 15; i++)
for
(
int
j = 0; j < 2; j++)
dp[i,j] = -1;
int
ans = calculate(0, 0, D, sz, num);
for
(
int
i = 1; i < len; i++)
ans += calculate(i, 1, D, sz, num);
return
ans;
}
public
static
void
Main(String[] args)
{
int
sz = 3;
int
[]D = { 1, 4, 9 };
int
N = 10;
Console.Write(countNumbers(D, N, sz));
}
}