Digit root ของจำนวนเต็มบวกบางตัวถูกกำหนดเป็นผลรวมของตัวเลขทั้งหมด เราได้รับอาร์เรย์ของจำนวนเต็ม เราต้องเรียงลำดับในลักษณะที่ว่าถ้า a มาก่อน b ถ้ารากหลักของ a น้อยกว่าหรือเท่ากับรากหลักของ b หากตัวเลขสองตัวมีรูทหลักเหมือนกัน ตัวที่เล็กกว่า (ตามความหมายทั่วไป) ควรมาก่อน ตัวอย่างเช่น 4 และ 13 มีรูทหลักเหมือนกัน อย่างไรก็ตาม 4 <13 ดังนั้น 4 มาก่อน 13 ในการเรียงลำดับ digitRoot ที่มีทั้งคู่
ตัวอย่างเช่น
for a = [13, 20, 7, 4], the output should be [20, 4, 13, 7].
มาเขียนโค้ดสำหรับปัญหานี้กันเถอะ -
เราจะแบ่งออกเป็นสองฟังก์ชัน คือ ฟังก์ชันแบบเรียกซ้ำที่นับผลรวมของตัวเลข จากนั้นฟังก์ชันการจัดเรียงที่เรียงลำดับองค์ประกอบตามผลรวมของตัวเลข
รหัสสำหรับสิ่งนี้จะเป็น −
ตัวอย่าง
const arr = [54, 23, 8, 89, 26]; const recursiveCount = (num, count = 0) => { if(num){ return recursiveCount(Math.floor(num/10), count+num%10); }; return count; }; const sorter = (a, b) => { const countDifference = recursiveCount(a) - recursiveCount(b); return countDifference || a - b; }; arr.sort(sorter); console.log(arr);
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
[ 23, 8, 26, 54, 89 ]