समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो संख्या num को एकमात्र आर्ग्युमेंट के रूप में लेता है।
हमारा फ़ंक्शन
numपर केवल ये दो संचालन कर सकता है: यदिnumसम है, तो हमnumकोnum/2से बदल सकते हैं।यदि
numविषम है, तो हमnumको या तोnum + 1याnum - 1से बदल सकते हैं।
केवल इन दो संचालनों के संयोजन का उपयोग करके हमारे फ़ंक्शन को यह गणना करनी होगी कि num को 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