mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
Update 0483 solution
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -104,37 +104,27 @@ 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)
|
||||
return strconv.Itoa(nVal - 1)
|
||||
}
|
||||
|
||||
// 计算 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
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
Reference in New Issue
Block a user