Dato il numero con le cifre ABCDEF è possibile contare il numero di "2" negli intervalli [0,F], [0,E9], [0,D99], [0,C999], [0,B9999]
e [0,A99999]
e aggiungerli.
Quindi per l'intervallo [0, X9999...999]
, il numero superiore T = X9999...999
può essere scritto come (X+1) * 10<sup>nines</sup> -1
.
Il numero di '2 del in tale intervallo è:
((X >= 2 ? 1/(X + 1)) : 0) + nines/10) * (T + 1);
Cioè: se X >= 2
, la frazione di numeri che hanno un '2' le nove posizioni + 1 è 1/(X+1)
, in totale ci sono (T+1)/(X+1)
'2 in quella posizione. Se X < 2
, quindi nessun numero su [0..T] ha un '2' in quella posizione.
Per le altre posizioni di cifra, è facile vedere che ad ogni posizione di cifra, 1/10
dei numeri hanno un '2', quindi ci sono (T+1)/10
'2 della struttura posizione 0, (T+1)/10
' 2'S posizione 1, ecc totale, (T+1) * nines/10
.
La complessità di questa soluzione è O (logN).
O (n²)? Se si intende, generare i numeri e controllare le cifre, ovvero O (n lg n), poiché ciascun numero n è rappresentato da cifre O (lg n). –
È una domanda di permutazione .. –