当前位置: 首页 > 后端技术 > Python

LeetCode 面试题64. 求1+2+…+n - Python

时间:2023-03-26 13:13:54 Python

LeetCode面试题64.Find1+2+…+n|qiu-12n-lcof题求1+2+...+n,要求不使用乘除、for、while、if、else、switch、case、条件判断语句(A?公元前)。例1:输入:n=3输出:6例2:输入:n=9输出:45限制条件:1<=n<=10000解题思路在这道题中,有很多条件限制条件。我们先看看有哪些方法可以解决?例如:等差数列求和,迭代,递归等差数列求和先看等差数列求和,这里可以直接套用公式,直接看代码:classSolution:defsumNums(self,n:int)->int:return(1+n)*n/2但是这里有个问题,这里用到了乘法和除法,先排除这个吧。迭代如果使用迭代,要么用while语句,要么用for语句,同样受题目限制,同样不可取。这里也贴出代码,不过不接受,看一下就好了。classSolution:defsumNums(self,n:int)->int:ans=0foriinrange(1,n+1):ans+=ireturnansrecursion通常来说,我们需要先用递归的方法来设置终止条件,这里必须用条件语句if,所以这也不符合题意。不过先看看如何实现:classSolution:defsumNums(self,n:int)->int:ifn==1:return1n+=sumNums(n-1)returnn我们知道有一个逻辑运算符短路属性。假设条件a和b有这样的性质,对于表达式a和b,如果a为False,那么a和b也一定为False,所以b不会被执行。对于表达式a或b,如果a为True,那么a或b也可以判断结果为True,所以b不会被执行。现在要使用这个短路属性,尝试修改递归方法的代码部分(使用和或或将起作用)。具体代码如下。代码实现#code1class解决方案:def__init__(self):self.ans=0defsumNums(self,n:int)->int:n==1orself.sumNums(n-1)self.ans+=nreturnself.ans#code2class解决方案:def__init__(self):self.ans=0defsumNums(self,n:int)->int:n>1andself.sumNums(n-1)self.ans+=nreturnself.ans执行结果总结先列举一些可以解决问题的方法,如:等差数列求和、迭代、递归;在用这些方法解决问题的同时,检查是否符合题意,不符合的剔除;递归递归的终止条件一般由if条件判断。这里利用逻辑运算符的短路特性来代替if语句来判断递归的终止条件,从而解决这个问题。以上是本文的主要内容。如果觉得文章不错,欢迎关注。公众号《书所集录》同步更新,也欢迎大家关注。