Python 刷Leetcode题库,顺带学英语单词(12)

简介: Python 刷Leetcode题库,顺带学英语单词(12)

Permutations

Given a collection of distinct integers, return all possible permutations.    [#46]


Example:
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]



题意:给定一个不重复的整数集,返回所有可能的排列。

使用现成的库函数:

>>> from itertools import permutations
>>> permutations([1,2,3])
<itertools.permutations object at 0x039EE5A0>
>>> [*permutations([1,2,3])]
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
>>> [*permutations([1,2,3,4])]
[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2),
 (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1),
 (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1),
 (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]
>>> 


自定义函数:

>>> def permute(nums):
        if len(nums) <= 1:
            return [nums]
        res = []
        for i, num in enumerate(nums):
            n = nums[:i] + nums[i+1:]
            for x in permute(n):
                res.append([num]+ x)
        return res
>>> permute([1,2,3])
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
>>> permute([1,2,3,4])
[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2],
 [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1],
 [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1],
 [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]
>>> 



Permutations II


Given a collection of numbers that might contain duplicates, return all possible unique permutations.   [#47]

Example:
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]



题意:给定一个可能有重复数字的整数列表,返回所有可能的不重复排列。

使用现成的库函数,然后去重:

>>> from itertools import permutations
>>> t = [*permutations([1,1,2])]
>>> result = []
>>> [result.append(i) for i in t if i not in result]
[None, None, None]
>>> [list(i) for i in result]
[[1, 1, 2], [1, 2, 1], [2, 1, 1]]
>>> 



自定义函数:只要在上一题的函数中加上判断 “if ([num]+ x) not in res:” 即可

>>> def permute(nums):
  if len(nums) <= 1:
    return [nums]
  res = []
  for i, num in enumerate(nums):
    n = nums[:i] + nums[i+1:]
    for x in permute(n):
      if ([num]+ x) not in res:
        res.append([num]+ x)
  return res
>>> permute([1,1,2])
[[1, 1, 2], [1, 2, 1], [2, 1, 1]]
>>> permute([1,1,2,2])
[[1, 1, 2, 2], [1, 2, 1, 2], [1, 2, 2, 1], [2, 1, 1, 2], [2, 1, 2, 1], [2, 2, 1, 1]]
>>> 



相关单词


permutation

英 [ˌpɜːmjuˈteɪʃn]   美 [ˌpɜːrmjuˈteɪʃn]  

       n. 排列(方式);组合(方式);置换


permute

       v. 改变…的序列;排列;交换;变更;(滤砂)软化

   前缀per- 贯穿

   词根-mut- 改变,交换


distinct

英 [dɪˈstɪŋkt]   美 [dɪˈstɪŋkt]  

       adj.不同的;明显的;清晰的;清楚的;明白的;有区别的;不同种类的;确定无疑的;确切的

   前缀dis- 分开

   词根-tinct-(=stinct)刺;刺激


contain

英 [kənˈteɪn]   美 [kənˈteɪn]  

       vt.包含;含有;容纳;控制,克制,抑制(感情);防止…蔓延(或恶化)

   前缀con- 加强

   词根-tain- 拿住


duplicate

英 [ˈdjuːplɪkeɪt , ˈdjuːplɪkət]   美 [ˈduːplɪkeɪt , ˈduːplɪkət]  

       vt.复制;复印;复写;(尤指不必要时)重复,再做一次

       adj.完全一样的;复制的;副本的

       n.完全一样的东西;复制品;副本

   前缀du- 二,双

   词根-plic- 重复

   后缀-ate- 使…


unique

英 [juˈniːk]   美 [juˈniːk]  

       adj.唯一的;独一无二的;独特的;罕见的;(某人、地或事物)独具的,特有的

   前缀uni- 一的, 单的


目录
相关文章
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
162 6
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
341 2
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
302 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
91 0
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
113 0
|
小程序 IDE 开发工具
Python编写单词复习小程序
Python编写单词复习小程序
157 0
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
316 7
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
141 3
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
110 3

热门文章

最新文章

推荐镜像

更多