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

 1 function sumAll(arr) {
 2   var min = Math.min(arr[0],arr[1]);
 3   var max = Math.max(arr[0],arr[1]);
 4   var sum=0;
 5   for(var i=min;i<=max;i++){
 6     num += i;
 7   }
 8   return sum;
 9 }
10 sumAll([5, 1]);

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

感兴趣可以看看。

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

 1 function sumAll(arr) {
 2   var newarr = [];
 3   if(arr[0] > arr[1]){
 4     arr.sort(function(a,b){
 5       return a - b;
 6     });
 7   }
 8   for(var i = arr[0]; i <= arr[1]; i++){
 9      newarr.push(i);    
10   }
11   var sum = newarr.reduce(function(c,d){
12     return c + d;
13   });
14   return sum;
15 }
16 sumAll([5, 1]);

这个还可以变一下big。

 1 function sumAll(arr) {
 2   var sum = 0;
 3   if(arr[0] > arr[1]){
 4     arr.sort(function(a,b){
 5       return a - b;
 6     });
 7   }
 8   for(var i = arr[0]; i <= arr[1]; i++){  
 9     sum +=i;
10   }
11   return sum;
12 }
13 sumAll([5, 1]);

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

感兴趣可以看看。

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

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

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

 

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

posted on 2017-01-06 18:51  Ace呼噜鳄  阅读(932)  评论(0编辑  收藏  举报

导航