力扣每日一题(五十——找到指定长度的回文数)

仅以此纪录每日LeetCode所刷题目。

题目描述:

示例: 

思路:

记录一下自己的笨比做法,下次做题的时候希望可以改进,就不写思路了。

代码:

 

class Solution:
    def kthPalindrome(self, queries: List[int], intLength: int) -> List[int]:
        dict1 = {1:9,2:9,3:90,4:90,5:900,6:900,7:9000,8:9000,9:90000,10:90000,11:900000,12:900000,13:9000000,14:9000000,15:90000000}
        list1 = []
        for i in queries:
            if i > dict1[intLength]:
                list1.append(-1)
            else:
                if intLength == 1:
                    list1.append(i)
                elif intLength == 2:
                    list1.append(i*11)
                elif intLength > 2:
                    i -= 1
                    i = str(i)
                    b = ''
                    if intLength%2 == 0:
                        a = intLength//2
                        if a - len(i) == 1:
                            b = "1"
                        elif a - len(i) > 1:
                            b = "1" + "0"*(a - len(i)-1)
                        elif a - len(i) == 0:
                            c = len(str(i))
                            i = int(i)
                            i += 10 ** (c-1)
                        i = str(i)
                        res = b + i
                        res += res[::-1]
                    else:
                        a = intLength//2+1
                        if a - len(i) == 1:
                            b = "1"
                        elif a - len(i) > 1:
                            b = "1" + "0"*(a - len(i)-1)
                        elif a - len(i) == 0:
                            c = len(str(i))
                            i = int(i)
                            i += 10 ** (c-1)
                        i = str(i)
                        res = b + i
                        res += res[::-1][1:]
                    list1.append(int(res))
        return list1

题目描述:

示例:

思路:

这道题可以使用模拟的方法,逐个比较奇数下标所对应的数字和偶数下标所对应的数字是否相同。若相同,则偶数下标变为(n+1);反之,偶数下标变为(n+2)。最后再判断长度是否为偶数,若为奇数,删除最后一个元素即可。

代码:

class Solution:
    def minDeletion(self, nums: List[int]) -> int:
        
        n = len(nums)
        ans = 0

        i = 0
        while i <= n-2:                 # i表示偶数下标
            if nums[i] == nums[i+1]:    # 此时需删去nums[i]【实际操作中可利用i+1来表示下一个偶数下标】
                ans += 1
                i += 1                  # 此时,i+1 为下一个偶数下标
            else:
                i += 2                  # 否则,i+2 为下一个偶数下标
        
        if (n-ans) % 2 == 1:            # 剩余的数组元素个数不为偶数,删掉最后一个元素即可
            ans += 1
        
        return ans

题目描述:

示例:

思路:

这道题可以相互循环遍历,但是那样耗时太久,我使用的时候set()函数,之后直接进行相减即可。

代码:

class Solution:
    def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]:
        a = set(nums1)
        b = set(nums2)
        return [list(a-b), list(b-a)]

 

题目描述:

 

示例:

 

思路:

这道题主要是细节要考虑齐全。有三种情况可以直接返回空数组:1、rolls里面的骰子点数之和已经大于等于总骰子点数之和。2、rolls里面的骰子点数之和+剩余骰子全是6的点数之和仍然小于总骰子点数之和。3、rolls里面的骰子点数之和+剩余骰子全是1的点数之和仍然大于总骰子点数之和。考虑这三种情况之后,我们就可以求出剩下骰子点数的平均值,之后取余剩下的数加上即可。

代码:

class Solution:
    def missingRolls(self, rolls: List[int], mean: int, n: int) -> List[int]:
        longth = len(rolls)
        count1 = mean * (n + longth)
        count2 = 0
        for i in rolls:
            count2 += i
        if count2 > count1 or 6 * n + count2 < count1 or n + count2 > count1:
            return []
        rem = count1 - count2
        if rem % n == 0 :
            return [rem//n] * n
        else:
            a = rem % n
            b = rem // n
            list1 = [b] * n
            for i in range(a):
                list1[i] += 1
            return list1

 

题目描述:

 

示例:

 

思路:

每日一题,没什么好说的,求出二进制之后转为字符串形式,查看是否存在“11”或者“00”。

代码:

class Solution:
    def hasAlternatingBits(self, n: int) -> bool:
        str1 = ""
        while n!= 1:
            a = n % 2
            str1 += str(a)
            n //= 2
        str1 += "1"
        if "11" in str1 or "00" in str1:
            return False
        else:
            return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值