美文网首页
全排列(字典序和非字典序)

全排列(字典序和非字典序)

作者: 安哥拉的赞礼 | 来源:发表于2020-03-07 17:50 被阅读0次
# 全排列函数permutation,需要使用递归来列举,也是一个知识点(参考网络)
# 除了使用模块,当然可以自己写一个函数来实现:
#下面是字典序
def permutation(xs):   #简化问题,假定形参xs是列表
    if len(xs) == 0 or len(xs) == 1:
        return [xs]
    result = []
    for i in xs:
        temp_list = xs[:] #对xs进行切片操作,使得temp_list的值和xs一样 但是temp_list的改变不影响xs
        temp_list.remove(i)
        temp = permutation(temp_list) #使用递归 生成删掉一个元素的xs的全排列
        for j in temp:   #对temp中的每一项再进行遍历
            j.insert(0,i)   #j[0:0] = [i]在index 0 的位置插入之前删去的i
            result.append(j)
    return result

for i in permutation([1,2,3,4]):
    print(i)

#下面是非字典序排列
li=[1,2,3,4]
res=[]
def Perm(m):#交换序
    global li
    if m==len(li)-1 :
        res.append(li)
    else:
        for j in range(m,len(li)):
            li[j],li[m]=li[m],li[j]
            Perm(m+1)
            li=li[:]
            li[j],li[m]=li[m],li[j]
Perm(0)
for i in res:
    print(i)
'''
当用[:]赋值时,生成的是一个新的对象,改变时不会改变之前的值,是深拷贝
'''

相关文章

  • 全排列(字典序和非字典序)

  • 有一种问题叫全排列

    全排列问题:(非字典序) public class Main { public static void mai...

  • 全排列&下一个字典序&上一个字典序问题(C++)

    1、用递归(DFS)和非递归两种方式输出一个序列的全排列;2、找到当前序列的下一个和上一个字典序。 全排列和字典序...

  • Permutations

    求一个数组的全排列。 遇到的问题: 1.忘记了字典序排列的定义;2.思考时间过长;3.没有及时找到全排列和字典序之...

  • JavaScript#31:数组--(字典排序)Next Per

    求一个序列的下一个全排列...........按照字典序。 所谓字典序,比如说 123三个数字组成的全排列就有: ...

  • 字典序算法笔记

    一、相关概念介绍 字典序字典序就是按照字典中出现的顺序对字符进行排序。 全排列给定多个字符,可以按照任意顺序进行排...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 字典序排列

    字符串的全排列,普通递归如下: 详细的解析:http://blog.csdn.net/randyjiawenjie...

  • 全排列

    问题描述 求1-n的所有按字典序的全排列 C++实现

  • 全排列

    递归不支持字典序,只支持全排列 1. 不含重复元素的全排列 2. 含重复元素 非递归处理 支持处理重复元素(不包含...

网友评论

      本文标题:全排列(字典序和非字典序)

      本文链接:https://www.haomeiwen.com/subject/rtkhdhtx.html