您的位置:首页 > 编程语言 > Go语言

leetCode 483. Smallest Good Base

2017-03-13 10:49 281 查看

1.题目

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.

The range of n is [3, 10^18].

Example 1:

Input: “13”

Output: “3”

Explanation: 13 base 3 is 111.

大意就是找出最小进制都是1的数,如一个10进制为13的数,他的3进制为111,

2.算法

这个题的意思是找到最小基数,那么所得到的全为1的个数肯定最长,我们先找一个比较长的全为1的数,来找一下基数,如果不行则去一个1,在找基数,直到找到为止。m 的取值范围是 [2, log(n, 2)]当m取定时,k的取值范围是

public String smallestGoodBase(String n)
{
long i = Long.parseLong(n);
int maxLong = (int)(Math.log(i) / Math.log(2) + 1);
for (int j = maxLong; j >= 2; j--)
{
int k = find(i, j);
if (k != 0) return k + "";
}
return i - 1 + "";
}
public int find(long i, int l)
{
int ll = 2;
int lr = (int)Math.pow(i, 1.0/l);
while (ll <= lr)
{
int mid = ll + (lr - ll) / 2;
long sum = 0;
int t = 1;
for (int j = 0; j <= l; j++)
{
sum += t;
t *= mid;
}
if (sum == i) return mid;
else if (sum > i) lr = mid - 1;
else ll = mid + 1;
}
return 0;
}


此外还有各种数学方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: