【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
相关文章
相关标签/搜索