สมมติว่าเรามีจำนวนเต็ม n เราเรียก k>=2 เป็นฐานดีของ n เมื่อเลขทั้งหมดของ n ฐาน k เป็น 1 ดังนั้นหากตัวเลข n เป็นสตริง เราจะต้องคืนค่าฐานดีที่น้อยที่สุดของ n เป็น สตริง ดังนั้นหากตัวเลขคือ 121 คำตอบจะเป็น 3 เนื่องจาก 121 ในฐาน 3 คือ 11111
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดวิธีการที่เรียกว่า getSum() ซึ่งจะใช้ x และความยาว
- ตั้งค่า mainSum :=0 และ temp :=1
- สำหรับ i ในช่วง 0 ถึงความยาว – 1 −
- mainSum :=mainSum + อุณหภูมิ, อุณหภูมิ :=อุณหภูมิ * x
- คืน mainSum
- กำหนดวิธีการที่เรียกว่า check() ซึ่งจะใช้เวลา n และความยาว -
- ต่ำ :=1 สูง :=n
- ในขณะที่สูง>=ต่ำ −
- กลาง :=ต่ำ + (สูง – ต่ำ) / 2
- mainSum :=getSum(กลาง, ยาว)
- ถ้า mainSum =n ให้คืนค่า mid
- มิฉะนั้น เมื่อ mainSum> n แล้วสูง :=กลาง – 1
- มิฉะนั้น ต่ำ :=กลาง + 1
- คืน -1
- จากวิธีหลัก ให้ทำดังนี้ -
- n :=จำนวนที่กำหนด
- สำหรับ i ในช่วง 64 ลงไปที่ 0
- x :=ตรวจสอบ (n, i)
- ถ้า x>=2 ให้คืนค่า x เป็นสตริง
- คืนค่า n – 1 เป็นสตริง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object):
def getSum(self, x, length):
mainSum = 0
temp = 1
for i in range(length):
mainSum += temp
temp *= x
return mainSum
def check(self, n, length):
low = 1
high = n
while high >= low:
mid = low + (high - low) // 2
mainSum = self.getSum(mid, length)
if mainSum == n:
return mid
elif mainSum > n:
high = mid - 1
else:
low = mid + 1
return -1
def smallestGoodBase(self, n):
n = int(n)
for i in range(64, 0, - 1):
x = self.check(n, i)
if x >= 2:
return str(x)
return str(n - 1)
ob = Solution()
print(ob.smallestGoodBase("121")) อินพุต
“121”
ผลลัพธ์
3