समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो एक पूर्णांक num को पहले और एकमात्र आर्गुमेंट के रूप में लेता है। हमारे फ़ंक्शन को 0 और num (दोनों सहित) के बीच हर संख्या के लिए एक सरणी तैयार करनी चाहिए, प्रत्येक संख्या के लिए, संबंधित तत्व उस संख्या के बाइनरी प्रतिनिधित्व में निहित 1s की संख्या होना चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const num = 4;
तो आउटपुट होना चाहिए -
const output = [0, 1, 1, 2, 1];
आउटपुट व्याख्या:
क्योंकि 0 में इसके बाइनरी रूप में 0 1s हैं, 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 से बदलने के रूप में माना जा सकता है, इसलिए हमें समीकरण numberOfBits(n) === numberOfBits(Math.floor(n / 2)) + 1 मिलता है।
आउटपुट
कंसोल में आउटपुट होगा -
[ 0, 1, 1, 2, 1 ]