Sum of 'n' Numbers - Codewars
题目
sum_of_n (or SequenceSum.sumOfN in Java) takes an integer n and returns a List of length abs(n) + 1. The List contains the numbers in the arithmetic series produced by taking the sum of the consecutive integer numbers from 0 to n inclusive.n can also be 0 or a negative value.(实在是翻译不出来)
Example:
5 -> [0, 1, 3, 6, 10, 15]
-5 -> [0, -1, -3, -6, -10, -15]
7 -> [0, 1, 3, 6, 10, 15, 21, 28]
我的解法:
function sumOfN(n) {
var array = new Array();
if (n >= 0) {
for (var i = 1, sum = 0; i < n + 2; i++) {
array.push(sum);
sum = sum + i;
}
} else {
for (var i =- 1, sum = 0; i > n - 2; i--) {
array.push(sum);
sum = sum + i;
}
}
return array;
};
思路分析:依旧简单直接。题目给的例子用 array,那就返回 array。n 有正负,那就分类讨论。最后 sum = sum + i
完事。
来看别人怎么写:
插一句:觉得这个阶段(7kyu)的题思路很清(简)晰(单),差别在于方法的选择以及代码的优化。
解法一:
function sumOfN(n) {
var arr = [],
counter = 0;
for (var i = 0; i <= Math.abs(n); i++) {
arr.push(counter + i);
counter += i;
}
return n >= 0 ? arr : arr.map(function(el) {return 0 - el});
};
解法二:
function sumOfN(n) {
for (var i = 0, list = []; i <= Math.abs(n); i++) {
list.push((list[i - 1] || 0) + i * (n < 0 ? -1 : 1));
}
return list
}
解法三:
function sumOfN(n) {
return Array.apply(0, Array(Math.abs(n) + 1)).map(
function(_, i) {
return (n < 0 ? -1 : 1) * i * ( i + 1) / 2;
});
};
分析:
解法一:不论 n 的正负,一律按照 n 的绝对值来处理,最后判断n的正负。若为负,则利用 map() 方法将数组元素遍历为负。
解法二:精彩!每次 push() 后,自动 push 下一个数组元素。(list[i - 1] || 0)
判断 n=0 的情况。
解法三:暂时还看不懂 T_T …….
还有很多解法,大同小异。这里是地址
以上。