मान लीजिए हमें दो धनात्मक पूर्णांक n और d दिए गए हैं जहां d 0 से 9 तक का अंक है। हमें यह निर्धारित करना है कि 1 से n के बीच के पूर्णांकों में अंक d कितनी बार आता है।
उदाहरण के लिए, n=45, d=5 के लिए आउटपुट 5 होगा (संख्याएं: 5, 15, 25, 35, 45)।
एल्गोरिदम (रिकर्सिव डिजिट DP)
solve(n, d)फ़ंक्शन परिभाषित करें:- यदि
n < 0, तो 0 वापस करें k = n//10 - 1ans = solve(k, d)*10 + k + 1- यदि
d == 0, तोans -= 1 m = n//10 * 10- जब
m <= n:ans += str(m).count(str(d))m += 1
ansवापस करें
- यदि
- मुख्य फ़ंक्शन से
solve(n, d)कॉल करें
उदाहरण
class Solution:
def solve(self, n, d):
if n < 0: return 0
k = n//10 - 1
ans = self.solve(k, d)*10 + k + 1
if d == 0: ans -= 1
m = n//10 * 10
while m <= n:
ans += str(m).count(str(d))
m += 1
return ans
ob = Solution()
print(ob.solve(45, 5))
इनपुट
45, 5
आउटपुट
5