奇数的完美方块

时间:2015-04-16 21:28:12

标签: javascript performance algorithm mathematical-optimization

在JavaScript中,有没有一种更有效的方法来计算奇数的完美正方形而不是这个(存储在数组perfectSqrs中的最后一个完美正方形是console.logged):

let n = 999,
    oddNums = [],
    i;
for (i = 3; i < n; i += 1) {
    if (i % 2 !== 0) {
        oddNums.push(i);
    }
}
let oddLength = oddNums.length;
let perfectSqrs = [1],
    j = 0;
while (j < oddLength - 1) {
    perfectSqrs[j + 1] = perfectSqrs[j] + oddNums[j];
    j += 1;
}
console.log(perfectSqrs[perfectSqrs.length - 1]);

2 个答案:

答案 0 :(得分:3)

看起来你只想生成一个完美的正方形阵列?也许你可以这样做:

var squares = [1];
var numSquares = 100;

for (var i=3; i<numSquares*2; i+=2) {
  squares.push(squares[squares.length - 1] + i);
}

console.log(squares);

对于不清楚此算法的人,基本上是:

  • 1
  • 4(1 + 3)
  • 9(1 + 3 + 5)
  • 16(1 + 3 + 5 + 7)
  • 25(1 + 3 + 5 + 7 + 9)

完美正方形基本上是奇数之和

答案 1 :(得分:2)

与算法和逻辑无关的JS更多。您可以完全避免第一个循环,也可以避免存储(内存效率)奇数。用1开始你的第二个循环,然后以2而不是1(1,3,5,7,...)递增迭代。