对于这个Kata (查找斐波那契数列的第n个值),我有一个有效的解决方案,但是我总是得到一个超时错误。有没有人能提供关于如何重构它以更有效地运行的建议?提前感谢!
下面是description - https://www.codewars.com/kata/simple-fun-number-395-fibonacci-digit-sequence/train/javascript链接
对于给定的三个非负整数a,b和n,就像斐波那契数列一样,生成一个无穷大的序列,使用下面的规则:
a,b,n,生成一个无限的序列,就像斐波那契数列一样,使用以下规则:
step1:使用ab作为初始序列。step2:计算序列的最后两位数之和,并将其附加到序列的末尾。重复查找你的任务就是完成函数step2。返回序列的第n位(从0开始)。
function find(a,b,n){
let start = ("" + a + b);
let next = a + b;
let seq = start + next;
while (seq.length <= n) {
seq += (parseInt(seq[seq.length-2]) + parseInt(seq[seq.length-1]));
}
return parseInt(seq[n]);
}
console.log(find(7,8,9))
// should return 5
发布于 2018-10-18 11:34:22
当你转换并进行字符串操作时,它通常会更慢。
function nextVal(num){
const last = (num%10);
const lastButOne = (num - last)/10 % 10;
const sum = last + lastButOne;
return sum < 10 ? num * 10 + sum : num *100 + sum;
}
function find(a,b,n){
let num = a * 10 + b;
const above = Math.pow(10, n);// anything less than we don't have enough digits
while (num < above) {
num = nextVal(num);
}
return Number(`${num}`.charAt(n));
}
上面的代码依赖于数字检查,只将其转换为字符串(这也可以避免)
https://stackoverflow.com/questions/52864946
复制相似问题