数字根排序算法JavaScript

一个正整数的数字根定义为其所有数字的总和。我们得到了一个整数数组。我们必须以这样一种方式对它进行排序:如果a的数字根小于或等于b的数字根,则a在b之前。如果两个数字具有相同的数字根,则较小的一个(通常是)应排在第一位。例如,4和13具有相同的数字根,但是4 <13因此4在出现两者的任何digitRoot排序中都在13之前。

例如,

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 ]
猜你喜欢