【leetcode】64. 条件求和,递归+移位运算

2021年11月25日 阅读数:4
这篇文章主要向大家介绍【leetcode】64. 条件求和,递归+移位运算,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

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

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

限制:
1 <= n <= 10000code

解题思路:递归

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

1.递归it

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

2.移位运算符io

解题代码:console

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

JS移位运算符补充:function

1.“<<”运算符

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

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

2.“>>”运算符

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

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

3.“>>>”运算符

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

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

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