Gốc số (digit root) của một số nguyên dương được định nghĩa là tổng của tất cả các chữ số của nó. Chúng ta được cho một mảng số nguyên. Cần sắp xếp mảng sao cho a đứng trước b nếu gốc số của a nhỏ hơn hoặc bằng gốc số của b. Nếu hai số có cùng gốc số, số nhỏ hơn (theo nghĩa thông thường) sẽ đứng trước. Ví dụ: 4 và 13 có cùng gốc số, tuy nhiên 4 < 13 nên 4 đứng trước 13.
Ví dụ:
cho a = [13, 20, 7, 4], kết quả nên là [20, 4, 13, 7].Hãy viết mã cho bài toán này. Chia thành hai hàm: hàm đệ quy tính tổng chữ số, và hàm sắp xếp dựa trên tổng chữ số.
Ví dụ
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);Kết quả
Đầu ra trong console sẽ là:
[ 23, 8, 26, 54, 89 ]