जैसा कि हम जानते हैं कि ग्रे कोड एक बाइनरी न्यूमरल सिस्टम है जहां दो क्रमिक मान केवल एक बिट में भिन्न होते हैं। मान लीजिए हमारे पास एक गैर-ऋणात्मक पूर्णांक n है जो कोड में बिट्स की कुल संख्या दर्शाता है। हमें ग्रे कोड का अनुक्रम प्रिंट करना है। एक ग्रे कोड अनुक्रम 0 से शुरू होना चाहिए। यदि इनपुट 2 है, तो परिणाम [0,1,3,2] होगा, क्योंकि 0 का ग्रे 00 है, 1 का ग्रे 01 है, 2 का ग्रे 11 है, और 3 का ग्रे 10 है।
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- ans नामक एक सरणी बनाएं
- प्रत्येक संख्या के लिए ग्रे कोड ढूंढें और उन्हें ans सरणी में जोड़ें।
- ग्रे में बदलने के लिए, हम संख्या लेंगे और संख्या को 1 बिट दाएं शिफ्ट करने के बाद XOR करेंगे।
उदाहरण
#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> grayCode(int n) {
vector <int> ans;
for(int i = 0; i < (1 << n); i++){
ans.push_back(i ^ (i >> 1));
}
return ans;
}
};
int main(){
Solution ob;
print_vector(ob.grayCode(4));
}
इनपुट
4
आउटपुट
[0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8, ]