剑指 Offer 64. 求1+2+…+n
Posted 小田mas
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 64. 求1+2+…+n相关的知识,希望对你有一定的参考价值。
64. 求1+2+…+n
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
看到这个的一瞬间是很懵的,经过查找资料,嗯,明白了。
来自力扣题解K哥
常见的逻辑运算符有“短路效应”:
- if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
- if(A || B) // 若 A 为 true ,则 B 的判断不会执行(即短路),直接判定 A || B 为 true
之所以采用这个是因为我们需要采用递归的思想解决这个问题,而递归又需要判断,所以我们可以采用相应的逻辑运算符来取而代之!
原递归思路:
public int sumNums(int n)
if(n == 1) return 1;
n += sumNums(n - 1);
return n;
对应本题:
class Solution
public int sumNums(int n)
boolean x = n > 1 && (n += sumNums(n - 1)) > 0;
return n;
解释一下,”&&“即我们熟悉的与,需要符号左右两边两者都为真,该式才为真,所以对应这上面来说,当n>1时,递归式才能正常地运行下去,与原递归思路中n=1时直接返回一样。
以上是关于剑指 Offer 64. 求1+2+…+n的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 64. 求1+2+…+n(递归+短路运算)
剑指 Offer 64. 求1+2+…+n(递归+短路运算)
LeetCode剑指 Offer 64. 求1+2+…+n(C++)