面试题64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
最大的限制是不让用循环,这样会想到用递归的方法——但是递归不用if判断结束条件又不行。有点像智力题,最后使用到的是短路法。例如
A and B
有一点小小的编译原理在其中,在这样的语句中,如果A是True,则进一步判断B;如果A是False,那直接不用管B的真假直接返回False。所以这样的语句可以完成一个相当于
if A:
if B:
#do some things
因此利用这个短路语句来写递归结束的条件,python代码如下:
class Solution:
def __init__(self):
self.res = 0
def sumNums(self, n: int) -> int:
n > 1 and self.sumNums(n - 1)
self.res += n
return self.res
时间复杂度为O(n),空间复杂度为O(1)。