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:如有不足或错误请指出,一定及时纠正。