7.29

1.第一题:
在这里插入图片描述
这是一道数学题。。。。
结论:作为先手,如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利。
原因:
1.小于3块的话,你作为先手就可以全拿走,结束游戏。
2.如果刚好4块的话,作为先手一定会输,因为对手一定会拿走最后一块。所以在自己的回合中应避免自己剩下4个。
3.但是如果不是4倍数的话,就可以控制将4个留给对手,那么自己必定会赢。比如7,那就先把后四个排除,剩下3个,自己都拿走,就将四个僵局留给对手。比如13,将3*4剪掉,第一次自己拿走1个,后几轮对手不管哪几个,你都可以和他配对成4个,然后把最后4个留给他。
4.如果刚好是4的倍数,比如8,对方很容易将4的僵局留给你,将后面四个先排除,前四个你作为先手不管拿1-3几个,对面都可以和你加起来等于4,从而把后四个留给你。
所以把n除以4,如果整除,那就必定会输。相反,总会赢。

class Solution:
    def canWinNim(self, n: int) -> bool:
        if n%4==0:
            return False
        else:
            return True

2.第二题
在这里插入图片描述
利用层次遍历,遍历时判断是否为左叶子节点:

class Solution:
    def sumOfLeftLeaves(self, root: TreeNode) -> int:
        if root==None:
            return 0
        res=0
        demo=[root]
        while demo:
            node=demo.pop(0)
            if node.left and node.left.left==None and node.left.right==None:
                res+=node.left.val
                demo.append(node.left)
            elif node.left:
                demo.append(node.left)
            if node.right:
                demo.append(node.right)
        return res

3.第三题:
在这里插入图片描述这道题真是,十分简单:

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        num=bin(x^y).count('1')
        return num

4.第四题:
在这里插入图片描述
简单题,我用的列表来存储所有连续1的长度,最后返回最大值即可:

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        count=0
        res=[]
        for i in nums:
            if i==1:
                count+=1
            else:
                res.append(count)
                count=0
            
        res.append(count)        
        return max(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值