刷题0704
作者:互联网
1. 401lc
# -*- coding:utf-8 -*- # Author: Lucy """ top:[1,2,4.8] [0,11] down:[1,2,4,8,16,32] [0,59] 给出亮灯的数量,返回所有可能的时间, 时间的要求,时不能为0开头 返回的字符串用:来拼接 划分点应该以top的个数来划分: top的时间有1个情况,任选1个 top的时间有2个情况,任选2个,单大于11的要排除 。。。 总共亮灯的个数-top的个数=down的个数 down里面寻找指定个数的组合,结果在【0,59】的结果要留下 permutation(iterable,2) """ import itertools top = [1,2,4,8] down = [1,2,4,8,16,32] turnedOn = 3 top_n = len(top) down_n = len(down) time = "" hour_ll = sorted([i for i in range(top_n)]) res_list= [] if turnedOn < top_n: if hour == hour_ll[0]: minute_list = list(itertools.permutations(down, turnedOn)) # print(minute_list) minute_res = [] for i in minute_list: if sum(i)>59: continue minute_res.append(sum(i)) minute_res = list(set(minute_res)) # print(minute_res) for i in minute_res: time = "00:" + str(i).rjust(2,'0') res_list.append(time) print(res_list) if hour == 1: minute_list = list(itertools.permutations(down, turnedOn-1)) print(minute_list) minute_res = [] # for i in minute_list: # if sum(i)>59: # continue # minute_res.append(sum(i)) # minute_res = list(set(minute_res)) # print(minute_res) # for i in minute_res: # time = "00:" + str(i).rjust(2,'0') # res_list.append(time) # print(res_list) from itertools import combinations,product from itertools import combinations, permutations class Solution: def readBinaryWatch(self, num: int) -> List[str]: h_m = ['8','4','2','1',32,16,8,4,2,1] result = [] for i in list(combinations(h_m,num)): print(i) hour=0 minute=0 for j in i: if isinstance(j,str): hour+=int(j) else: minute+=j if hour<12 and minute<60: hour = str(hour) if minute==0: minute='00' elif minute<10: minute='0'+str(minute) else: minute=str(minute) result.append(hour +":"+minute) return result
2. 88lc
# -*- coding:utf-8 -*- # Author: Lucy """ 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。 示例 2: 输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1] 解释:需要合并 [1] 和 [] 。 合并结果是 [1] 。 方法一:重新赋值之后再排序 思路:巧妙运用索引截取给列表后半部分重新赋值 考察点: 1.列表某b部分也是可以重新赋值的,该列表就会变成新的列表,一定要学会使用这种思想,打开这种意识; 2.nums1.sort()和sorted(nums)的区别 nums1.sort() 排序后还是nums1,不可以对它进行赋值操作 sorted(nums1) 是可以外面加一层赋值的操作 """ from typing import List class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ nums1[m:] = nums2 print("nums1", nums1) nums1.sort() return nums1 if __name__ == '__main__': nums1 = [1, 2, 3, 0, 0, 0] m = 3 nums2 = [2, 5, 6] n = 3 ss = Solution() print(ss.merge(nums1, m, nums2, n))
3. 721lc
""" \输入: accounts = [["John", "johnsmith@mail.com", "john00@mail.com"], ["John", "johnnybravo@mail.com"], ["John", "johnsmith@mail.com", "john_newyork@mail.com"], ["Mary", "mary@mail.com"]] 输出: [["John", 'john00@mail.com', 'john_newyork@mail.com', 'johnsmith@mail.com'], ["John", "johnnybravo@mail.com"], ["Mary", "mary@mail.com"]] 解释: 第一个和第三个 John 是同一个人,因为他们有共同的邮箱地址 "johnsmith@mail.com"。 第二个 John 和 Mary 是不同的人,因为他们的邮箱地址没有被其他帐户使用。 可以以任何顺序返回这些列表,例如答案 [['Mary','mary@mail.com'],['John','johnnybravo@mail.com'], ['John','john00@mail.com','john_newyork@mail.com','johnsmith@mail.com']] 也是正确的。 思路: 每个列表的索引0取出来, 索引相同,如果剩下对应的列表中如果有相同的元素,则将对应的列表合并成新的列表,包括索引0也要合并; 索引相同,如果剩下对应的列表中没有相同的元素,则不需要合并; 如果索引不同,保持原样不变化 并查集的解法: """ class Solution(object): def accountsMerge(self, accounts): # 用parents维护每一行的父亲节点 # 如果parents[i] == i, 表示当前节点为根节点 parents = [i for i in range(len(accounts))] dic = {} # 查找x的根root def find(x): root = x while root != parents[root]: root = parents[root] return root # 把x和y合并 def union(x, y): parents[find(x)] = find(y) # 如果发现某一行的某个邮箱在之前行出现过,那么把该行的index和之前行合并(union)即可 for i in range(len(accounts)): for email in accounts[i][1:]: if email in dic: union(dic[email], i) else: dic[email] = i users = collections.defaultdict(set) res = [] # 1. users:表示每个并查集根节点的行有哪些邮箱 # 2. 使用set:避免重复元素 # 3. 使用defaultdict(set):不用对每个没有出现过的根节点在字典里面做初始化 for i in range(len(accounts)): for account in accounts[i][1:]: users[find(i)].add(account) # 输出结果的时候注意结果需按照字母顺序排序(虽然题目好像没有说) for key, val in users.items(): res.append([accounts[key][0]] + sorted(val)) return res
标签:res,list,mail,0704,com,nums1,minute,刷题 来源: https://www.cnblogs.com/wz123/p/16441583.html