【leetcode】64. 條件求和,遞歸+移位運算

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。code

示例 1:
輸入: n = 3
輸出: 6
示例 2:
輸入: n = 9
輸出: 45

限制:
1 <= n <= 10000遞歸

解題思路:it

  • 1.遞歸
  • 2.移位運算符

1.遞歸io

/**
 * @param {number} n
 * @return {number}
 */
var sumNums = function(n) {
    let sum = n;
    return n > 0 && (sum += sumNums(n - 1))
};

2.移位運算符console

解題代碼:function

/**
 * @param {number} n
 * @return {number}
 */
var sumNums = function(n) {
    return (Math.pow(n, 2) + n) >> 1
};

JS移位運算符補充:class

1.「<<」運算符

「<<」運算符執行左移位運算。在移位運算過程當中,符號位始終保持不變。若是右側空出位置,則自動填充爲 0;超出 32 位的值,則自動丟棄。移動

把數字 5 向左移動 2 位,則返回值爲 20。

2.「>>」運算符

「>>」運算符執行有符號右移位運算。與左移運算操做相反,它把 32 位數字中的全部有效位總體右移,再使用符號位的值填充空位。移動過程當中超出的值將被丟棄。while

把數值 1000 向右移 8 位,則返回值爲 3。

3.「>>>」運算符

「>>>」運算符執行五符號右移位運算。它把無符號的 32 位整數全部數位總體右移。對於無符號數或正數右移運算,無符號右移與有符號右移運算的結果是相同的。co

下面兩行表達式的返回值是相同的。

console.log(1000 >>> 8);  //返回值3
    console.log(1000 >> 8);  //返回值3
相關文章
相關標籤/搜索