Giả sử chúng ta có một số nguyên n, chúng ta gọi k> =2 là một cơ sở tốt của n, khi tất cả các chữ số của n cơ số k là 1. Vì vậy, nếu số n được cho dưới dạng chuỗi, chúng ta phải trả về cơ số tốt nhỏ nhất của n là sợi dây. Vì vậy, nếu số là 121, thì câu trả lời sẽ là 3, vì 121 trong cơ số 3 là 11111.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một phương thức được gọi là getSum (), phương thức này sẽ lấy x và độ dài
- đặt mainSum:=0 và temp:=1
- cho tôi trong phạm vi từ 0 đến độ dài - 1 -
- mainSum:=mainSum + temp, temp:=temp * x
- trả về mainSum
- Xác định một phương thức được gọi là check (), phương thức này sẽ lấy n và chiều dài -
- thấp:=1, cao:=n
- trong khi cao> =thấp -
- giữa:=low + (cao - thấp) / 2
- mainSum:=getSum (giữa, chiều dài)
- nếu mainSum =n, thì trả về giữa
- ngược lại khi mainSum> n, thì high:=mid - 1
- nếu không thì thấp:=mid + 1
- trả về -1
- Từ phương thức chính, hãy làm như sau -
- n:=số đã cho
- đối với tôi trong phạm vi 64 giảm xuống 0
- x:=check (n, i)
- nếu x> =2, thì trả về x dưới dạng chuỗi
- trả về n - 1 dưới dạng chuỗi
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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"))
Đầu vào
“121”
Đầu ra
3