這是在fcc上的中級演算法中的第一題,拉出來的原因並不是因為有什麼好說的,而是我剛看時以為是求兩個數字的和, 很顯然錯了。我感覺自己的文字理解能力被嚴重鄙視了- -。故拉出來折騰折騰。 要求: 給你一個包含兩個數字的數組。返回這兩個數字和它們之間所有數字的和。 最小的數字並非總在最前面。 思路:在正確 ...
這是在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:如有不足或錯誤請指出,一定及時糾正。