मान लीजिए हमारे पास 0 और 9 के बीच एक पूर्णांक d है, हमारे पास दो पॉजिटिव इंटीजर्स low और high भी हैं जो निचली और ऊपरी सीमाएं हैं। हमें उन सभी पूर्णांकों में d के एक अंक के रूप में घटित होने की संख्या ज्ञात करनी है जो low और high के बीच हैं, सीमाओं low और high को शामिल करते हुए।
तो, यदि इनपुट d = 1, low = 1, high = 13 है, तो आउटपुट 6 होगा, क्योंकि अंक d=1 6 बार होता है जैसे 1, 10, 11, 12, 13।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
एक फ़ंक्शन zero() परिभाषित करें, जो n लेगा,
ret := 0, x := 0
यदि n, 0 के समान है, तो:
1 लौटाएं
m := 1 से शुरू करें, जब m <= n, अपडेट करें m := m * 10, करें:
a := n / m
b := n mod m
z := a mod 10
यदि m में अंकों की संख्या, n में अंकों की संख्या के समान है, तो:
लूप से बाहर आएं
यदि z > x, तो:
ret := ret + ((a / 10) + 1) * m
अन्यथा जब z, x के समान है, तो:
ret := ret + (a / 10) * m + (b + 1)
अन्यथा:
ret := ret + (a / 10) * m
ret लौटाएं
एक फ़ंक्शन f() परिभाषित करें, जो x, n लेगा,
ret := 0
m := 1 से शुरू करें, जब m <= n, अपडेट करें m := m * 10, करें:
a := n / m
b := n mod m
z := a mod 10
यदि z > x, तो:
ret := ret + ((a / 10) + 1) * m
अन्यथा जब z, x के समान है, तो:
ret := ret + (a / 10) * m + (b + 1)
अन्यथा:
ret := ret + (a / 10) * m
यदि x, 0 के समान है, तो:
ret := ret - m
ret लौटाएं
मुख्य मेथड से निम्नलिखित करें:
ret लौटाएं
f(d, high) - f(d, low - 1) लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int digitCount(int x) {
int ret = 0;
while (x) {
ret++;
x /= 10;
}
return ret;
}
int zero(int n) {
int ret = 0;
int x = 0;
if (n == 0)
return 1;
for (int m = 1; m <= n; m *= 10) {
int a = n / m;
int b = n % m;
int z = a % 10;
if (digitCount(m) == digitCount(n))
break;
if (z > x) {
ret += ((a / 10) + 1) * m;
} else if (z == x) {
ret += (a / 10) * m + (b + 1);
} else {
ret += (a / 10) * m;
}
}
return ret;
}
int f(int x, int n) {
int ret = 0;
for (int m = 1; m <= n; m *= 10) {
int a = n / m;
int b = n % m;
int z = a % 10;
if (z > x) {
ret += ((a / 10) + 1) * m;
} else if (z == x) {
ret += (a / 10) * m + (b + 1);
} else {
ret += (a / 10) * m;
}
if (x == 0) {
ret -= m;
}
}
return ret;
}
int digitsCount(int d, int low, int high) {
return f(d, high) - f(d, low - 1);
}
};
int main() {
Solution ob;
cout << (ob.digitsCount(1, 1, 13));
}
इनपुट
1,1,13
आउटपुट
6