排列组合

一、递归

1、自己调用自己

2、找到一个退出的条件

二、全排列:针对给定的一组数据,给出包含所有数据的排列的组合

1:1

1,2:[[1,2],[2,1]]

1,2,3:【【1,2,3】,【1,3,2】,【2,1,3】,

【2,3,1】,【3,2,1】,【3,1,2】】

三、1,2,3 的全排列 --》[2,3]-》[2]

规律:以1开头的[2,3]的全排列 + 以2开头的[1,3]的全排列 + 以3开头的[1,2]的全排列

-》

以1开头的(以2开头的[3]的全排列+以3开头的[2]的全排列)的全排列 + 以2开头的(以1开头的[3]的全排列+以3开头的[1]的全排列)的全排列  + 以3开头的(以1开头的[2]的全排列+以2开头的[1]的全排列)的全排列

习题2:当只有一个数时,他的全排列的个数是几?

答案:1

[2] ->[[2]]

[2,3] -》[[2,3],[3,2]]

表示全排列的时候,我们习惯使用列表来表示

四、全排列算法:

求n个数的全排列:

1、遍历的抽取每一个数出来,求剩下n-1个数的全排列

2、针对n-1个数的全排列,抽取一个数出来,求剩下的n-2个数的全排列

3、循环上述的步骤,直到数字个数变成1,满足递归的退出条件。

4、把上面所有的全排列求和,则是最终的全排列。

算法实现:

# encoding=utf-8

def perm(listVar):

    if len(listVar) == 1:

        return [listVar]

    retlist = []

    for i in xrange(len(listVar)):

        #得到一个新的列表,列表中去掉了i指向的元素

        restList = listVar[:i] + listVar[i+1:]

        #

        #perm([2,3])-> [[2,3],[3,2]]

        #1 加到 perm(2,3) 的结果中去

        perResult = perm(restList)

        for x in perResult:

            #习题:此行代码是否可以这样写,为何?

            # retlist.append(listVar[i]+x)

            retlist.append(listVar[i:i+1]+x)

    return retlist

if __name__ == '__main__':

    print perm([1,2,3])

python算法-排列组合的更多相关文章

  1. python编写排列组合,密码生产功能

    python编写排列组合 python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutation ...

  2. python 实现排列组合

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...

  3. 【Python】排列组合itertools & 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

  4. HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)

    传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...

  5. python 编写排列组合

    python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutations([)) # 全排列 p ...

  6. Python实现排列组合

    # -*- coding: utf-8 -*-"""Created on Sat Jun 30 11:49:56 2018 @author: zhen"&quo ...

  7. python之排列组合测试

    # test permutations and combinations import itertools as it for i in it.combinations('abcd',2): prin ...

  8. python解决排列组合

    笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...

  9. [经典算法] 排列组合-N元素集合的M元素子集

    题目说明: 假设有个集合拥有n个元素,任意的从集合中取出m个元素,则这m个元素所形成的可能子集有那些? 题目解析: 假设有5个元素的集合,取出3个元素的可能子集如下: {1 2 3}.{1 2 4 } ...

随机推荐

  1. java-web项目:用servlet监听器实现显示在线人数

    1.创建一个监听器 package com.listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpS ...

  2. 零基础逆向工程18_PE结构02_联合体_节表_PE加载过程

    联合体 特点 1.联合体的成员是共享内存空间的 2.联合体的内存空间大小是联合体成员中对内存空间大小要求最大的空间大小 3.联合体最多只有一个成员有效 节表数据结构说明 PE 加载 过程 FileBu ...

  3. Linux安装loadrunner负载机

    1.loadrunner下载地址:http://download.csdn.net/download/intel80586/9542271或者其他资源 2.首先用rpm -qa|grep -i c++ ...

  4. SQL Server 2016,2014 “无法找到数据库引擎启动句柄”

    当我决定安装SharePoint 2016 IT预览版时,我想我应该将它安装在Windows Server 2016技术预览版以及SQL Server 2016社区技术预览版(CTP)上.我敢打赌,你 ...

  5. WinForm form属性

    一.布局 Autostroll   控件内容大于可见区域是否自动显示滚动条 Maximumsize 窗体可调到最大尺寸 minimumsize  窗体可调到最小尺寸 size  窗体看到的尺寸 Sta ...

  6. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  7. 通用的MIME类型:application/octet-stream

    按照内容类型排列的 Mime 类型列表 类型/子类型 扩展名 application/envoy evy application/fractals fif application/futurespla ...

  8. self & this 上下文

    对象:指向对象的首地址: 函数:代表了函数运行的主要上下文: 内部:在类的内部使用. self Within the body of a class method, self refers to th ...

  9. 原型模式 -- JavaScript语言的灵魂

    原型模式就是将原型对象指向创建对象的类,使这些类共享原型对象的方法与属性.JS是基于原型链实现对象之间的继承,是对属性或者方法的共享,而不是对属性和方法的复制. // 图片轮播类 var LoopIm ...

  10. Python正则表达式计算器流程图