ধরুন আমাদের N দৈর্ঘ্যের সমস্ত অ-ঋণাত্মক পূর্ণসংখ্যা খুঁজে বের করতে হবে যাতে প্রতি দুটি পরপর সংখ্যার মধ্যে পরম পার্থক্য হল K। আমাদের মনে রাখতে হবে যে উত্তরের প্রতিটি সংখ্যার 0 নম্বরটি ছাড়া অবশ্যই অগ্রণী শূন্য থাকবে না। আমরা যেকোনো ক্রমে উত্তর ফেরত দিতে পারি। তাই যদি N =3 এবং K =7, তাহলে আউটপুট হবে [181,292,707,818,929], এখানে আমরা দেখতে পাচ্ছি 070 একটি বৈধ সংখ্যা নয়, কারণ এটির একটি অগ্রণী শূন্য রয়েছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
dp নামে একটি ম্যাট্রিক্স তৈরি করুন এবং এর আকার হবে n + 1, 1 থেকে 9 dp এ পূরণ করুন[1]
-
1 থেকে N – 1
রেঞ্জের জন্য i-
পরিদর্শন বলে একটি সেট সংজ্ঞায়িত করুন
-
j এর জন্য রেঞ্জ 0 থেকে dp[i>
এর আকার-
x :=dp[i, j]
-
lastNum :=x এর শেষ সংখ্যা
-
অঙ্ক :=lastNum + k
-
যদি সংখ্যাটি 0 থেকে 9 এর মধ্যে থাকে এবং (x*10 + অঙ্ক) পরিদর্শন না করা হয়, তাহলে
-
dp[i + 1]
-এ (10*x + ডিজিট) সন্নিবেশ করান -
পরিদর্শন করা অ্যারেতে 10*x + সংখ্যা প্রবেশ করান
-
-
ডিজিট :=lastNum – K
-
যদি সংখ্যাটি 0 থেকে 9 এর মধ্যে থাকে এবং (x*10 + অঙ্ক) পরিদর্শন না করা হয়, তাহলে
-
dp[i + 1]
-এ (10*x + ডিজিট) সন্নিবেশ করান -
পরিদর্শন করা অ্যারেতে 10*x + সংখ্যা প্রবেশ করান
-
-
-
-
যদি N 1 হয়, তাহলে dp[N>
-এ 0 ঢোকান -
dp[N>
ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> numsSameConsecDiff(int N, int K) { vector <int> dp[N + 1]; for(int i = 1; i <= 9; i++){ dp[1].push_back(i); } for(int i = 1; i < N; i++){ set <int> visited; for(int j = 0; j < dp[i].size(); j++){ int x = dp[i][j]; int lastNum = x % 10; int digit = lastNum + K; if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){ dp[i + 1].push_back(x * 10 + digit); visited.insert(x * 10 + digit); } digit = lastNum - K; if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){ dp[i + 1].push_back(x * 10 + digit); visited.insert(x * 10 + digit); } } } if(N == 1){ dp[N].push_back(0); } return dp[N]; } }; main(){ Solution ob; print_vector(ob.numsSameConsecDiff(3,7)); }
ইনপুট
3 7
আউটপুট
[181,292,707,818,929]