File tree Expand file tree Collapse file tree 1 file changed +39
-0
lines changed
solution/0483.Smallest Good Base Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public String smallestGoodBase (String n ) {
3
+ long num = Long .parseLong (n );
4
+ for (int len = 63 ; len >= 2 ; --len ) {
5
+ long radix = getRadix (len , num );
6
+ if (radix != -1 ) {
7
+ return String .valueOf (radix );
8
+ }
9
+ }
10
+ return String .valueOf (num - 1 );
11
+ }
12
+
13
+ private long getRadix (int len , long num ) {
14
+ long l = 2 , r = num - 1 ;
15
+ while (l < r ) {
16
+ long mid = l + r >>> 1 ;
17
+ if (calc (mid , len ) >= num ) r = mid ;
18
+ else l = mid + 1 ;
19
+ }
20
+ return calc (r , len ) == num ? r : -1 ;
21
+ }
22
+
23
+ private long calc (long radix , int len ) {
24
+ long p = 1 ;
25
+ long sum = 0 ;
26
+ for (int i = 0 ; i < len ; ++i ) {
27
+ if (Long .MAX_VALUE - sum < p ) {
28
+ return Long .MAX_VALUE ;
29
+ }
30
+ sum += p ;
31
+ if (Long .MAX_VALUE / p < radix ) {
32
+ p = Long .MAX_VALUE ;
33
+ } else {
34
+ p *= radix ;
35
+ }
36
+ }
37
+ return sum ;
38
+ }
39
+ }
You can’t perform that action at this time.
0 commit comments