LeetCode-python 753.破解保险箱
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-python 753.破解保险箱相关的知识,希望对你有一定的参考价值。
参考技术A 题目链接
难度:困难 类型: 深度优先搜索
有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 。
你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱。
举个例子,假设密码是 "345",你可以输入 "012345" 来打开它,只是你输入了 6 个字符.
请返回一个能打开保险箱的最短字符串。
示例1
示例2
密码接龙
这道题说的是给了k个数字,值为0到k-1,让我们组成n位密码。我们可以发现,为了尽可能的使钥匙串变短,所以我们的密码之间尽可能要相互重叠,
比如00和01,就共享一个0,
如果是3个数,012和120共享两个数”12”,
那么我们可以发现,两个长度为n的密码最好能共享n-1个数字,这样累加出来的钥匙串肯定是最短的。
密码共有n位,每一个位可以有k个数字,那么总共不同的密码总数就有k的n次方个。我们的思路是先从n位都是0的密码开始,取出钥匙串的最后n个数字,然后将最后一个数字依次换成其他数字,我们用一个Set来记录所有遍历过的密码,这样如果不在集合中,说明是一个新密码,而生成这个新密码也只是多加了一个数字,这样能保证我们的钥匙串最短
本文链接: https://www.jianshu.com/p/6f51c036cb0e
leetcode-python-字母异位词分组
1)先对所有字符串重排序,然后取set获得总共的分组个数。再逐个判断加入。时间复杂度太高了
class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: def so(x): x= sorted(x) return \'\'.join(x) temp = list(map(so, strs)) set_temp = list(set(temp)) result = list() for i in range(len(set_temp)): result.append([]) for i in range(len(temp)): result[set_temp.index(temp[i])].append(strs[i]) return result
2)哈希表+排序!字典的values也可以是列表!空间复杂度很低
class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: dic = dict() for i in strs: temp = \'\'.join(sorted(i)) if temp not in dic.keys(): dic[temp] = [i] else: dic[temp].append(i) return list(dic.values())
以上是关于LeetCode-python 753.破解保险箱的主要内容,如果未能解决你的问题,请参考以下文章
蓝桥杯选拔赛真题53Scratch破解保险柜 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
蓝桥杯选拔赛真题53Scratch破解保险柜 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解