मान लीजिए कि हमारे पास एक पूर्णांक n है, हम k>=2 को n का एक अच्छा आधार कहते हैं, जब n आधार k के सभी अंक 1 हैं। इसलिए यदि संख्या n को स्ट्रिंग के रूप में दिया जाता है, तो हमें n का सबसे छोटा अच्छा आधार वापस करना होगा। डोरी। तो अगर संख्या 121 है, तो उत्तर 3 होगा, क्योंकि आधार 3 में 121 11111 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- गेटसम () नामक एक विधि को परिभाषित करें, इसमें x और लंबाई लगेगी
- मुख्य राशि सेट करें:=0 और अस्थायी:=1
- मैं के लिए 0 से लंबाई - 1 की सीमा में -
- मुख्य राशि:=मुख्य योग + अस्थायी, अस्थायी:=अस्थायी * x
- मुख्य राशि लौटाएं
- चेक () नामक एक विधि को परिभाषित करें, इसमें n और लंबाई लगेगी -
- निम्न:=1, उच्च:=n
- जबकि उच्च>=निम्न −
- मध्य :=निम्न + (उच्च - निम्न) / 2
- मुख्य राशि:=getSum(मध्य, लंबाई)
- अगर mainSum =n, तो बीच में वापस आएं
- अन्यथा जब mainSum> n, तब उच्च :=मध्य – 1
- अन्यथा निम्न :=मध्य + 1
- वापसी -1
- मुख्य विधि से निम्न कार्य करें -
- n :=दी गई संख्या
- मैं के लिए 64 से लेकर 0 तक की सीमा में
- x :=check(n, i)
- अगर x>=2, तो x को स्ट्रिंग के रूप में लौटाएं
- एन -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