मान लीजिए कि पहली पंक्ति में, हमारे पास 0 है। अब प्रत्येक बाद की पंक्ति में, हम पिछली पंक्ति को देखते हैं और 0 की प्रत्येक घटना को 01 से प्रतिस्थापित करते हैं, और 1 की प्रत्येक घटना को 10 से प्रतिस्थापित करते हैं। मान लीजिए कि हमारे पास N पंक्तियाँ और अनुक्रमणिका K है, तो हम पंक्ति N में K-वें अनुक्रमित प्रतीक खोजना होगा। (K के मान 1-अनुक्रमित हैं।) (1 अनुक्रमित)। तो अगर N =4 और K =5, तो आउटपुट 1 होगा। ऐसा इसलिए है क्योंकि -
- पंक्ति 1:0
- पंक्ति 2:01
- पंक्ति 3:0110
- पंक्ति 4:01101001
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मान लीजिए कि विधि का नाम kthGrammar है। यह N और K लेता है।
- अगर N 1 है, तो 0 लौटाएं
- यदि k सम है, तो 1 लौटाएं जब kthGrammar(N – 1, K/2) 0 हो, अन्यथा 0
- अन्यथा kthGrammar(N – 1, (K + 1)/2) लौटाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int kthGrammar(int N, int K) {
if(N == 1) return 0;
if(K % 2 == 0){
return kthGrammar(N - 1, K / 2) == 0 ? 1 : 0;
}else{
return kthGrammar(N - 1, (K + 1) / 2);
}
}
};
main(){
Solution ob;
cout << (ob.kthGrammar(4, 5));
} इनपुट
4 5
आउटपुट
1