我正在运行CodeFight上的挑战,除了1个“隐藏测试”,我无法看到插入的测试数据,所有测试都会通过... 我正在寻找帮助指出我错过了或者我的解决方案失败的测试用例。数字根分类算法
问题:
一些正整数的位数根被定义为所有的 其位数的总和。我们给你一个整数数组。将它排序的方式是,如果 在b之前,则a的数字根小于或等于b的 数字根。如果两个数字具有相同的数字根,则应该先排列较小的一个(按照常规意义)。例如4和13 具有相同的数字根,但是4 < 13因此4在任何 数字根分类中都出现在13之前,其中两者都存在。
例
对于A = [13,20,7,4],输出应该是[20,4,13,7]。
[时限] 4000ms(JS)[输入] array.integer正整数的一个
阵列。
[输出] array.integer
我的解决方案:
function digitRootSort(a) {
"use strict";
function getDigitalRoot(n) {
let _dr = n
.toString()
.split('')
.reduce((acc, val, i) => {
return acc += parseInt(val)
}, 0)
.toString()
if (_dr.length > 1) {
return getDigitalRoot(_dr)
}
return parseInt(_dr)
}
const digitalRootSorted = a.sort((a,b) => {
const _a = getDigitalRoot(a)
const _b = getDigitalRoot(b)
return _a < _b
? -1
: _a > _b
? 1
: a < b
? -1
: a === b
? 0
: 1
})
return digitalRootSorted
}
哇,这是一个大'getDigitalRoot'函数,你可以写:'getDigitalRoot = n =>(n%9)|| 9;' –
您是否收到“隐藏测试失败”以外的任何消息 - 例如这可能是你的解决方案超过了时间限制吗? –
@WashingtonGuedes您的建议正确计算了数字根长至9 - 以上所有内容都需要进一步处理。 –