JavaScript求两个数字之间所有数字的和

这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和,

很显然错了。我感觉自己的文字理解能力被严重鄙视了- -。故拉出来折腾折腾。

要求:

给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。

最小的数字并非总在最前面。

思路:在正确理解要求之后,有三四种方法可以来解决这个问题;

1、就是提前给的提示Math.min()和Math.max()。

感兴趣可以看看。

Math.max():https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/max

Math.min():https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/min

 function sumAll(arr) {
var min = Math.min(arr[0],arr[1]);
var max = Math.max(arr[0],arr[1]);
var sum=0;
for(var i=min;i<=max;i++){
num += i;
}
return sum;
}
sumAll([5, 1]);

2、还是给的提示Array.reduce()。

感兴趣可以看看。

Array.reduce():https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 function sumAll(arr) {
var newarr = [];
if(arr[0] > arr[1]){
arr.sort(function(a,b){
return a - b;
});
}
for(var i = arr[0]; i <= arr[1]; i++){
newarr.push(i);
}
var sum = newarr.reduce(function(c,d){
return c + d;
});
return sum;
}
sumAll([5, 1]);

这个还可以变一下big。

 function sumAll(arr) {
var sum = 0;
if(arr[0] > arr[1]){
arr.sort(function(a,b){
return a - b;
});
}
for(var i = arr[0]; i <= arr[1]; i++){
sum +=i;
}
return sum;
}
sumAll([5, 1]);

3、是把这个看成等差数列求和,这里用到了Math.abs()方法。

感兴趣可以看看。

Math.abs():https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/abs

 function sumAll(arr) {
var a = arr[0];
var b = arr[1];
var n = Math.abs(a-b) + 1;
var sum = (a+b) * n / 2;
return sum;
}
sumAll([5, 1]);

到这里就先结束了,毕竟方法还有很多,就不费自己脑细胞了,哈哈哈

ps:如有不足或错误请指出,一定及时纠正。

上一篇:Tomcat绑定多个IP地址 多域名绑定


下一篇:C语言辗转相除法求2个数的最小公约数