समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता है जो संख्या, संख्या को एकमात्र तर्क के रूप में लेता है।
-
हमारा कार्य केवल इन दो कार्यों को num पर कर सकता है:यदि num सम है, तो हम num को num/2 से बदल सकते हैं
-
अगर संख्या विषम है, तो हम संख्या को num + 1 या num-1 से बदल सकते हैं।
केवल इन दो ऑपरेशनों के संयोजन का उपयोग करके हमारे फ़ंक्शन को यह गणना करने की आवश्यकता है कि कितने न्यूनतम संचालन को संख्या को 1 तक लाने की आवश्यकता है। फ़ंक्शन को संचालन की न्यूनतम संख्या वापस करनी चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const num = 7;
तब आउटपुट होना चाहिए -
const output = 4;
आउटपुट स्पष्टीकरण:
क्योंकि सबसे छोटे संभव ऑपरेशन हैं -
7 -> 8 -> 4 -> 2 -> 1 or 7 -> 6 -> 3 -> 2 -> 1
उदाहरण
इसके लिए कोड होगा -
const num = 7;
const downToOne = (num = 1) => {
let min = Number.POSITIVE_INFINITY;
let stack = [{ num: num, step: 0 }];
let set = new Set();
let next;
let item;
while (stack.length) {
item = stack.shift();
if (item.num === 1) {
if (min > item.step) {
min = item.step;
}
continue;
}
if (set.has(item.num) || item.step >= min) {
continue;
}
set.add(item.num);
next = item.step + 1;
if (item.num % 2 === 0) {
item.num /= 2;
stack.push({ num: item.num, step: next });
} else {
stack.push({ num: item.num - 1, step: next });
stack.push({ num: item.num + 1, step: next });
}
}
return min;
};
console.log(downToOne(num)); आउटपुट
कंसोल में आउटपुट होगा -
4