今天的题目如下所示:
从题目上看,不能使用乘除法说明不允许用公式计算,不能使用逻辑判断语句说明不能通过判断来实现累加。看着有点难,但是我稍微一想还是得到了一个符合条件速度还很快的答案:
class Solution:
def sumNums(self, n: int) -> int:
return sum(range(n+1))
这段代码的执行速率还是很快的:
但是我觉得这道题应该没有那么简单,于是乎我便决定再想想,看看有没有别的方法可以实现这个功能。
面对这种需要多次循环循环的功能,除了直接用条件判断或者迭代来算,还有一种方法就是使用递归。但是递归这里会遇到一个问题,就是递归需要一个结束条件,但是题目中说不允许使用条件判断,那要怎么实现递归的停止呢?我觉得只剩一种方法了,那就是用逻辑运算符来操作。
首先我试了一下逻辑运算符的操作逻辑:
可以看到在使用and 逻辑运算符操作时,如果有0,那返回结果必然是0,如果没有0的话,那返回结果就是在and后面的那个数字。这里的递归停止逻辑在于只要出现了0,and 的结果一定是0,无论另一个数的正负性如何。
根据这个逻辑,我有写了一个答案出来:
class Solution:
def sumNums(self, n: int) -> int:
return n + (n and self.sumNums(n - 1))
这次的运算速度更慢,但是熟悉了一遍and的使用,不亏😀