leetcode--全排列问题

给定{1,2,3,4,...,n}的排列组合数为n!

虽然我们知道n!怎么算,但是代码怎么实现的呢

一般思路来说,肯定是要用递归的

流程就是确定第1位,剩下的n-1位进行全排列,确定第2位,剩下的n-2位全排列。。。

普通递归实现:

def permutation(arr, p, q):
 
    if p == q:
        print(arr)
 
    else:
        for index in range(p, q):
 
            arr[index], arr[p] = arr[p], arr[index]
            permutation(arr, p+1, end)
            arr[index], arr[p] = arr[p], arr[index]

arr = [1,2,3]
permutation(arr, 0 ,len(arr))

利用itertools来直接调用:

from itertools import permutations
print(permutations([2,3,4]))

利用深度优先算法实现:代码来自链接

visit = [True, True, True]
temp = ["" for x in range(0, 3)]
def dfs(position):
    if position == len(arr):
        print(temp)
        return
 
    for index in range(0,len(arr)):
        if visit[index] == True:
            temp[position] = arr[index]
            visit[index] = False
            dfs(position + 1)
            visit[index] = True
arr = ["a", "b", "c"]
dfs(0)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值