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

Leetcode第177期周赛-答案与思路

时间:2023-03-26 18:44:28 Python

这次没有难题了。第一题5169.日期之间有多少天https://leetcode-cn.com/conte...其实应该是模拟方法计算天数。这里我直接使用python的datetime库来计算。有点作弊的嫌疑,不过可以通过。importdatetimeclass解决方案:defdaysBetweenDates(self,date1:str,date2:str)->int:d1=datetime.datetime.strptime(date1,'%Y-%m-%d')d2=datetime.datetime.strptime(date2,'%Y-%m-%d')returnabs((d2-d1).days)第二题5170.验证二叉树https://leetcode-cn.com/conte...确保有只有一个点的入度为0,其他点的入度都为1,整个图中没有环,是一棵树。为了防止0点不是根,计算所有点的入度,选择0的入度作为根(如果0的入度有多个,直接返回False)。如果一个点的入度大于1,它也返回False。遍历vis后发现环也返回Falseclass解决方法:defvalidateBinaryTreeNodes(self,n:int,leftChild:List[int],rightChild:List[int])->bool:f=[0]*ndefvis(i):ifi==-1:returnTrueiff[i]==1:returnFalsef[i]=1returnvis(leftChild[i])andvis(rightChild[i])foriinleftChild:ifi==-1:continuef[i]+=1foriinrightChild:ifi==-1:continuef[i]+=1rt=-1#print(f)foriinrange(n):如果f[i]==0:如果rt!=-1:返回假rt=ieliff[i]>1:返回假f=[0]*nvis(rt)ifsum(f)!=n:returnFalsereturnTrue第3题5171.最接近因子https://leetcode-cn.com/conte...方法很暴力,就是solve函数判断是否可以正分从sqrt(n)到1,且能整除的就是最小的差值。类解决方案:defclosestDivisors(self,num:int)->List[int]:defsolve(n):s=math.ceil(math.sqrt(n))foriinrange(s,1,-1):如果n%i==0:return[i,n//i]return[1,n]ans1=solve(num+1)ans2=solve(num+2)ifans2[1]-ans2[0]str:#digits.sort()s=sum(digits)c=collections.Counter(digits)ds=list(c.keys())ds.sort()f=Falseifs%3!=0:iflen(digits)>1:fordinds:ifd%3==s%3:#print(d)c[d]-=1f=Truebreakifnotfandlen(digits)>2:#print('here')fordinds:ifd!=0:forddinds:ifdd!=0:if(d+dd)%3==s%3:#print(d,dd)如果dd!=d或c[d]>1:c[d]-=1c[dd]-=1f=真breakiff:breakelse:f=Trueans=''print(f)iff:zf=Truefordinds:ifd!=0andc[d]>0:zf=Falseifzf:return'0'fordinds[::-1]:ans+=str(d)*c[d]returnans欢迎来到我的博客:https://codeplot.top/我的博客刷题分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/