奇数的完美平方

Perfect squares from odd numbers

在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]);

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

您似乎只想生成一个完美正方形数组?也许你可以这样做:

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)

完全平方本质上是奇数之和