排列组合

一、递归

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. class类型重定义,防止头文件重复加载

    今天调用自己写的一个类,出现了class类型重定义问题,上网查了相关资料,发现是头文件重复include引起的问题. 防止头文件重复加载: 系统那些头文件,无论怎么include都没事,因为一般都用了 ...

  2. linux机器上部署多台Tomcat

    在Linux机器上部署多台Tomcat, 我部署的是Tomcat8,只需要一步,即避免端口号冲突. 在解压后的tomcat目录下,修改conf下server.xml. 修改shutdown端口: &l ...

  3. UML的九种模型图

    本文转自UML 的九种模型图,仅供学习交流! 一.作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分. UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号的表示 ...

  4. This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms while caching

    今天运行自己的网站时报了这样一个错误,很是纳闷,这个网站运行了这么久,怎么报这个错呢,原来是做缓存的时候用到了基于windows平台的加密算法.解决方法如下: 删除注册表下的这个节点即可.删除HKEY ...

  5. 如何处理VirtualBox启动错误消息:The vboxdrv kernel module is not loaded

    我在启动minikube时,遇到如下错误消息: Starting local Kubernetes v1.10.0 cluster... Starting VM... E1010 03:27:37.9 ...

  6. [神经网络]一步一步使用Mobile-Net完成视觉识别(五)

    1.环境配置 2.数据集获取 3.训练集获取 4.训练 5.调用测试训练结果 6.代码讲解 本文是第五篇,讲解如何调用测试训练结果. 上一篇中我们输出了训练的模型,这一篇中我们通过调用训练好的模型来完 ...

  7. js 获取当前年月日时分秒星期

    $("#aa").click(function () { var date = new Date(); this.year = date.getFullYear(); this.m ...

  8. 重新postgresql出现错误:Problem running post-install step. Installation may not complete correctly. The database cluster initialisation failed.

    以前正常使用的postgresql,今天出现问题:报*.dll错误.百度了一下,只能重新安装 . 在重新安装过程中报:Problem running post-install step. Instal ...

  9. java中栈、堆和方法区的关系

    另外,常量池在方法区中

  10. 数据结构C语言实现系列——线性表(单向链表)

    #include <stdio.h> #include <stdlib.h> #define NN 12 #define MM 20 typedef int elemType ...