Biorąc pod uwagę liczbę z cyframi ABCDEF można policzyć liczbę "2 w zakresach [0,F], [0,E9], [0,D99], [0,C999], [0,B9999]
i [0,A99999]
i dodać je.
W przypadku zakresu [0, X9999...999]
najwyższy numer T = X9999...999
można zapisać jako (X+1) * 10<sup>nines</sup> -1
.
liczba „2 jest w tym zakresie są:
((X >= 2 ? 1/(X + 1)) : 0) + nines/10) * (T + 1);
że: jeśli X >= 2
frakcję liczb, które mają«2»w dziewiątkami pozycji +1 jest 1/(X+1)
w sumie istnieją (T+1)/(X+1)
'2's na tej pozycji. Jeśli X < 2
, wtedy żadna liczba na [0..T] nie ma "2" w tej pozycji.
Na pozostałych pozycjach cyfr, to łatwo zauważyć, że w każdej pozycji cyfr, 1/10
numerów mają „2”, więc istnieje (T+1)/10
„2 na pierwszej pozycji 0, (T+1)/10
” 2'S w pozycji 1, itp ogółem, (T+1) * nines/10
.
Złożoność tego rozwiązania to O (logN).
O (n²)? Jeśli masz na myśli generowanie liczb i sprawdzanie cyfr, to jest to O (n lg n), ponieważ każda liczba n jest reprezentowana przez cyfry O (lg n). –
To kwestia permuttation .. –