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 (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"math/bits"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func smallestGoodBase(n string) string {
|
func smallestGoodBase(n string) string {
|
||||||
num, _ := strconv.ParseUint(n, 10, 64)
|
nVal, _ := strconv.Atoi(n)
|
||||||
for bit := uint64(math.Log2(float64(num))); bit >= 1; bit-- {
|
mMax := bits.Len(uint(nVal)) - 1
|
||||||
low, high := uint64(2), uint64(math.Pow(float64(num), 1.0/float64(bit)))
|
for m := mMax; m > 1; m-- {
|
||||||
for low < high {
|
k := int(math.Pow(float64(nVal), 1/float64(m)))
|
||||||
mid := uint64(low + (high-low)>>1)
|
mul, sum := 1, 1
|
||||||
sum := findBase(mid, bit)
|
for i := 0; i < m; i++ {
|
||||||
if sum == num {
|
mul *= k
|
||||||
return strconv.FormatUint(mid, 10)
|
sum += mul
|
||||||
} else if sum > num {
|
}
|
||||||
high = mid - 1
|
if sum == nVal {
|
||||||
} else {
|
return strconv.Itoa(k)
|
||||||
low = mid + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return strconv.Itoa(nVal - 1)
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
@ -104,37 +104,27 @@ package leetcode
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"math/bits"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func smallestGoodBase(n string) string {
|
func smallestGoodBase(n string) string {
|
||||||
num, _ := strconv.ParseUint(n, 10, 64)
|
nVal, _ := strconv.Atoi(n)
|
||||||
for bit := uint64(math.Log2(float64(num))); bit >= 1; bit-- {
|
mMax := bits.Len(uint(nVal)) - 1
|
||||||
low, high := uint64(2), uint64(math.Pow(float64(num), 1.0/float64(bit)))
|
for m := mMax; m > 1; m-- {
|
||||||
for low < high {
|
k := int(math.Pow(float64(nVal), 1/float64(m)))
|
||||||
mid := uint64(low + (high-low)>>1)
|
mul, sum := 1, 1
|
||||||
sum := findBase(mid, bit)
|
for i := 0; i < m; i++ {
|
||||||
if sum == num {
|
mul *= k
|
||||||
return strconv.FormatUint(mid, 10)
|
sum += mul
|
||||||
} else if sum > num {
|
}
|
||||||
high = mid - 1
|
if sum == nVal {
|
||||||
} else {
|
return strconv.Itoa(k)
|
||||||
low = mid + 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return strconv.Itoa(nVal - 1)
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user