Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จำนวนที่น้อยที่สุดหลังจากลบ n หลักใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน 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