समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता है जो एक पूर्णांक, संख्या को पहले और एकमात्र तर्क के रूप में लेता है। हमारे फ़ंक्शन को 0 और अंक (दोनों सहित) के बीच प्रत्येक संख्या के लिए एक सरणी तैयार करनी चाहिए, प्रत्येक संख्या के लिए, संबंधित तत्व उस संख्या के द्विआधारी प्रतिनिधित्व में निहित 1s की संख्या होनी चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const num = 4;
तब आउटपुट होना चाहिए -
const output = [0, 1, 1, 2, 1];
आउटपुट स्पष्टीकरण:
क्योंकि 0 में 0 होता है, इसके बाइनरी फॉर्म 1 में 1 होता है, और इसी तरह।
उदाहरण
इसके लिए कोड होगा -
const num = 4; const mapBinary = (num = 0) => { if (num === 0){ return [0]; }; const res = [0]; for (let i = 1; i <= num; i++) { const n = i % 2 === 0 ? res[i/2] : res[Math.floor(i/2)] + 1; res.push(n); }; return res; };
कोड स्पष्टीकरण:
बिट्स की गणना करते समय, कुछ चीजें हैं जिन्हें हम चीजों को आसान बनाने के लिए ध्यान में रख सकते हैं।
-
numberOfBits(n) ===numberOfBits(2*n) , दूसरे परिणाम को पहले परिणाम की तुलना में एक और 0 बिट मिलता है।
-
यदि n एक सम संख्या है, तो n का अंतिम बिट 0 होगा।
-
यदि n एक विषम संख्या है, तो परिणाम की गणना को अंतिम बिटऑफ़ (n-1)/2 को 1 से बदलने के रूप में माना जा सकता है, इसलिए हमें समीकरण संख्याऑफबिट्स (एन) ===संख्याऑफबिट्स (मैथ फ्लोर (एन/2)) मिलता है। + 1 ।
आउटपुट
और कंसोल में आउटपुट होगा -
[ 0, 1, 1, 2, 1 ]