Skip to content

Commit 1d2980c

Browse files
authored
Create Solution.java
1 parent 2ce1efe commit 1d2980c

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

0 commit comments

Comments
 (0)