जैसा कि हम जानते हैं कि ग्रे कोड एक द्विआधारी अंक प्रणाली है जहां दो क्रमिक मान केवल एक बिट में भिन्न होते हैं। मान लीजिए कि हमारे पास कोड में बिट्स की कुल संख्या का प्रतिनिधित्व करने वाला एक गैर-ऋणात्मक पूर्णांक n है। हमें ग्रे कोड के सीक्वेंस को प्रिंट करना होता है। एक ग्रे कोड अनुक्रम 0 से शुरू होना चाहिए। इसलिए यदि इनपुट 2 है, तो परिणाम [0,1,3,2] होगा, ऐसा इसलिए है क्योंकि 0 का ग्रे 00 है, 1 का ग्रे 01 है, 2 का ग्रे है 11, और 3 का ग्रे 10 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक सरणी उत्तर बनाएं
- प्रत्येक संख्या के लिए ग्रे कोड ढूंढें और उन्हें उत्तर सरणी में जोड़ें।
- ग्रे में बदलने के लिए, हम नंबर लेंगे और नंबर 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; } }; 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, ]