《Leetcode》面试题64. 求1+2+…+n

求 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,根本不会执行右边的条件运算;&这个不具有短路功能,不管左边是真是假都会依旧执行右边。

如果逻辑或运算的话,||左边为真右边不参与运算,|不管真假都参加运算。

总结:这个题主要用到了递归+短路思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值