前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leepcode作业解析-5-21

leepcode作业解析-5-21

作者头像
py3study
发布2020-01-16 16:02:49
2670
发布2020-01-16 16:02:49
举报
文章被收录于专栏:python3python3python3

25、Nim游戏

你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4
输出: false 
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;
     因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

解答:这道题首先找规律,在我拿石头之前,如果石头书为4时,我就必输;如果为5,6,7时,我就必赢;如果是8时,我必输;9,10,11时,我又必赢;12时,我又输;因此得出只要是4的整数倍,那我就必输,否则就必赢。

class Solution(object):
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n>0 and n<4:
            return (True)
        elif n % 4 == 0:
            return (False)
        else:
            return (True)

26、3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例 1:

输入: 27
输出: true

示例 2:

输入: 0
输出: false

示例 3:

输入: 9
输出: true

示例 4:

输入: 45
输出: false

解答:

class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 1:
            return True
        elif n<3 or n %3 !=0 :
            return False
        #当n能整除3后,在进行取整和取余判断,如果条件不满足,继续循环。
        while True:
            n = n // 3            
            if n ==1:
                return True
            if n % 3 != 0:
                return False

27、 4 的幂

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

输入: 16
输出: true

示例 2:

输入: 5
输出: false

解答:

class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num == 1:
            return True
        if num < 4 or num%4 != 0:
            return False
        while True:
            num = num //4
            if num == 1:
                return True
            if num%4 != 0:
                return False

28、两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]

解答:第一次碰到送分题,不容易啊!!

class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        # nums1_set =set(nums1)
        # nums2_set = set(nums2)
        return(list(set(nums1) & set(nums2)))

29、字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

注意事项:您可以假定该字符串只包含小写字母。

解答:利用字典能存储key的value值,我们可以标记,字符串出现的第一次标记为1,如果出现第二次则+1,这样,第一个value等于1的key就是第一个不重复的字符。

class Solution(object):
    def firstUniqChar(self, s):
        """
        :type s: str
        :rtype: int
        """
        s1={}
        for a in s:
            if a not in s1:
                s1[a] = 1
            else:
                s1[a] +=1
        for j in range(len(s)):
            if s[j] in s1 and s1[s[j]] == 1: #如果列表s中索引值j对应的字符在字典s1中,并且该字符对应的value值为1,则第一个不重复的字符就是该字符;如果不是则继续循环。
                return j
        return -1
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 25、Nim游戏
    • 26、3的幂
    • 27、 4 的幂
    • 28、两个数组的交集
    • 29、字符串中的第一个唯一字符
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档