ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่มีตัวเลขสองตัว ให้เรียกว่า m และ n เป็นอาร์กิวเมนต์ตัวแรกและตัวที่สองตามลำดับ
หน้าที่ของเราคือลบ n หลักออกจากตัวเลข m เพื่อให้ตัวเลข 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));
คำอธิบายโค้ด:
เราได้ใช้อัลกอริธึมที่โลภโดยใช้สแต็กเพื่อกำหนดคำตอบ สำหรับแต่ละค่า el ของสตริงอินพุต num จากซ้ายไปขวา เรากด el ลงบนสแต็กหลังจากที่เราลบค่า n สูงสุดออกจากสแต็กซึ่งมากกว่า el แล้ว
เนื่องจากตำแหน่งซ้ายสุดของตัวเลขมีค่ามากกว่าตำแหน่งขวาสุด วิธีตะกละนี้ทำให้แน่ใจว่าตำแหน่งซ้ายสุดประกอบด้วยตัวเลขที่เล็กที่สุด และอะไรก็ตามที่เหลืออยู่ในสแต็กจะเป็นตัวเลขที่ใหญ่ที่สุดในด้านขวา- ตำแหน่งมากที่สุด
หลังจากประมวลผลสตริงอินพุต m แล้ว หากมี n หลักเหลือที่จะลบ ให้ลบตัวเลขขวาสุด n หลัก เนื่องจาก n หลักขวาสุดเป็นตัวเลขที่ใหญ่ที่สุด
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
44557