Dado el número con los dígitos ABCDEF puede contar el número de 'de 2 en los rangos [0,F], [0,E9], [0,D99], [0,C999], [0,B9999]
y [0,A99999]
y añadirlos.
Luego, para el rango [0, X9999...999]
, el número superior T = X9999...999
se puede escribir como (X+1) * 10<sup>nines</sup> -1
.
El número de 'de 2 en ese rango es:
((X >= 2 ? 1/(X + 1)) : 0) + nines/10) * (T + 1);
Eso es: si X >= 2
, la fracción de números que tienen un '2' en los nueves de posición + 1 es 1/(X+1)
, en total existen (T+1)/(X+1)
'2 en esa posición. Si es X < 2
, entonces ningún número en [0..T] tiene un '2' en esa posición.
Para las otras posiciones de dígito, es fácil ver que en cada posición de dígito, 1/10
de los números tienen un '2', por lo que hay (T+1)/10
'2 de en la posición 0, (T+1)/10
' 2'S en posición 1, etc. En total, (T+1) * nines/10
.
La complejidad de esta solución es O (logN).
O (n²)? Si quiere decir, generar los números y verificar los dígitos, eso es O (n lg n), ya que cada número n está representado por O (lg n) dígitos. –
Es una pregunta de permuttación. –