Binary Search-483. Smallest Good Base

For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1.

Now given a string representing n, you should return the smallest good base of n in string format. 

Example 1:

Input: "13"
Output: "3"
Explanation: 13 base 3 is 111.

 

Example 2:

Input: "4681"
Output: "8"
Explanation: 4681 base 8 is 11111.

 

Example 3:

Input: "1000000000000000000"
Output: "999999999999999999"
Explanation: 1000000000000000000 base 999999999999999999 is 11.

 

Note:

  1. The range of n is [3, 10^18].
  2. The string representing n is always valid and will not have leading zeros.

 


public class Solution {
 2     public String smallestGoodBase(String n) {
 3         long num = Long.parseLong(n);
 4         int maxIndex = (int) (Math.log(num)/Math.log(2) + 1);
 5         for(int i = maxIndex; i >= 3; i--) {
 6             long base = (long)Math.pow(num, 1.0 / (i - 1)), sum = 1, cur = 1;
 7             for(int j = 1; j < i; j++) {
 8                 sum += (cur *= base);
 9             }
10             if(sum == num) return String.valueOf(base);
11             12         return String.valueOf(num - 1);
13     }
14 }

 

 

posted @ 2018-01-13 02:16  抒抒说  阅读(167)  评论(0编辑  收藏  举报