仅以此纪录每日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