Update 0483 solution

This commit is contained in:
YDZ
2021-06-17 21:21:21 +08:00
parent 555737bcff
commit 7a90f3713d
2 changed files with 26 additions and 47 deletions

View File

@ -2,34 +2,23 @@ package leetcode
import (
"math"
"math/bits"
"strconv"
)
func smallestGoodBase(n string) string {
num, _ := strconv.ParseUint(n, 10, 64)
for bit := uint64(math.Log2(float64(num))); bit >= 1; bit-- {
low, high := uint64(2), uint64(math.Pow(float64(num), 1.0/float64(bit)))
for low < high {
mid := uint64(low + (high-low)>>1)
sum := findBase(mid, bit)
if sum == num {
return strconv.FormatUint(mid, 10)
} else if sum > num {
high = mid - 1
} else {
low = mid + 1
}
nVal, _ := strconv.Atoi(n)
mMax := bits.Len(uint(nVal)) - 1
for m := mMax; m > 1; m-- {
k := int(math.Pow(float64(nVal), 1/float64(m)))
mul, sum := 1, 1
for i := 0; i < m; i++ {
mul *= k
sum += mul
}
if sum == nVal {
return strconv.Itoa(k)
}
}
return strconv.FormatUint(num-1, 10)
}
// 计算 k^m + k^(m-1) + ... + k + 1
func findBase(mid, bit uint64) uint64 {
sum, base := uint64(1), uint64(1)
for i := uint64(1); i <= bit; i++ {
base *= mid
sum += base
}
return sum
return strconv.Itoa(nVal - 1)
}