在 JavaScript 中删除 n 位后的最小数字
问题
我们需要编写一个接受两个数字的JavaScript函数,让我们分别称它们为m和n作为第一个和第二个参数。
我们函数的任务是从数字m中去除n位数字,使m成为去除n位数字后可能的最小数字。最后,该函数应在删除数字后返回数字m。
例如,如果函数的输入是-
const m = '45456757'; const n = 3;
那么输出应该是-
const output = '44557';
输出说明:
我们删除了5、6和7位数字以获得尽可能小的数字。
示例
此代码将是-
const m = '45456757'; const n = 3; const removeDigits = (m, n, stack = []) => { let arr = m.split('').map(Number); for(let el of arr){ while (n &&stack.length&& el < stack[stack.length - 1]){ stack.pop(); --n; }; stack.push(el); }; let begin = stack.findIndex(el => el > 0); let end =stack.length- n; return (!stack.length || begin == -1 || begin == end) ? "0" : stack.slice(begin, end).join('').toString(); }; console.log(removeDigits(m, n));
代码说明:
我们在这里使用了使用堆栈的贪婪算法来制定答案。对于输入字符串num从左到右的每个值el,我们在从堆栈中删除了最多n个大于el的值后,将el压入堆栈。
由于数字最左边的位置比最右边的位置更有价值,这种贪婪的方法确保最左边的位置由最小的数字组成,堆栈中剩下的就是右边最大的数字——大多数职位。
在输入字符串m被处理后,如果还有任何剩余的n位要删除,则删除最右边的n个数字,因为最右边的n个数字是最大的数字。
输出结果
控制台中的输出将是-
44557