在 JavaScript 中将数字降为 1
问题
我们需要编写一个JavaScript函数,它接受number和num作为唯一参数。
我们的函数只能对num做这两个操作:如果num是偶数,我们可以用num/2替换num
如果num是奇数,我们可以用num+1或num-1替换num。
仅使用这两个操作的组合,我们的函数需要计算将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