সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যেটি সংখ্যা, সংখ্যাকে একমাত্র যুক্তি হিসাবে গ্রহণ করে৷
-
আমাদের ফাংশন num-এ শুধুমাত্র এই দুটি অপারেশন করতে পারে:num জোড় হলে, আমরা num/2 দিয়ে 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