1

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

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

限制:
1 <= n <= 10000

解题思路:

  • 1.递归
  • 2.移位运算符

1.递归

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

2.移位运算符

解题代码:

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

JS移位运算符补充:

1.“<<”运算符

“<<”运算符执行左移位运算。在移位运算过程中,符号位始终保持不变。如果右侧空出位置,则自动填充为 0;超出 32 位的值,则自动丢弃。

把数字 5 向左移动 2 位,则返回值为 20。

2.“>>”运算符

“>>”运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。

把数值 1000 向右移 8 位,则返回值为 3。 

3.“>>>”运算符

“>>>”运算符执行五符号右移位运算。它把无符号的 32 位整数所有数位整体右移。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。

下面两行表达式的返回值是相同的。

    console.log(1000 >>> 8);  //返回值3
    console.log(1000 >> 8);  //返回值3 

微芒不朽
1.2k 声望1.3k 粉丝