求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
思路:这个题应该是小学生都会做吧,但是用到了很多的限制条件,这些条件会破解平时各种做法。所以第一时间想到递归,但是递归需要判断结束时候的条件呀,这个时候没法用关键字就不会了,看了discuss之后才知道,利用短路的思想去做。其实利用的是一个与符号,只有前面那部分满足之后才执行后面哪个部分,否则不执行。
class Solution:
def sumNums(self, n: int) -> int:
#如果n=0的话递归就结束,但是不让用if呀 所以做不了还是做不了
# if n==0:
# return 0
# return n+self.sumNums(n-1)
#这个and如果算关键字的话,那就换成运算符号且就可以了
return n != 0 and n + self.sumNums(n - 1)
return n != 0 && n + self.sumNums(n - 1)
#这个是关键字就不能用
return sum(range(1,n+1))
聊聊&&和&区别:
共性:两个都是逻辑与运算,左右两边都是真才是真,有一边为假则是假。
个性:&&这个具有短路功能。如果左边为False,根本不会执行右边的条件运算;&这个不具有短路功能,不管左边是真是假都会依旧执行右边。
如果逻辑或运算的话,||左边为真右边不参与运算,|不管真假都参加运算。