全排列相关的

Posted 光彩照人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列相关的相关的知识,希望对你有一定的参考价值。

一、给一个列表,输出其中元素的所有组合情况,全排列问题。例如[1,2,3],一共有6中组合情况。

def permutation(arr,start,end):
  #分割递归到相等的时候,说明已经递归到只有一个元素的时候了,这个时候可以打印出来了
if start==end: for val in arr: print(val,end= ) print(‘‘) return for i in range(start,len(arr)):
     #每次都要交换一下,谁做第一个 arr[i],arr[start]
=arr[start],arr[i]
     #递归得到出去第一个后面的全排列组合 permutation(arr,start
+1,end)
   #交换后还要再交换回来,因为下次后面的还要和第一个交换,这样就固定第一个,否则来回交换就乱了 arr[i], arr[start]
= arr[start], arr[i]

二、输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

def compare(a,b):
    if str(a)+str(b)>str(b)+str(a):
        return 1
    elif str(a)+str(b)<str(b)+str(a):
        return -1
    else:
        return 0

def printMin(arr):
    from functools import cmp_to_key
    key = cmp_to_key(compare)
    tmp=[str(x) for x in sorted(arr,key=key)]
    return ‘‘.join(tmp)

 基本思想:就是两两元素拼成一个字符串数字进行比较,把拼成最小的那种方式就是两个元素的排序方式,例如:1,12 可以拼成112和121,显然112<121,所以两者的位置就是1,12。按顺序排完之后,按这个顺序组成的数字就是最小的数字。

 

以上是关于全排列相关的的主要内容,如果未能解决你的问题,请参考以下文章

python 全排列

C语言数字全排列的问题(急!!)求C代码和算法

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma