繁体   English   中英

我们如何找到一个 n 位数字的排列?

[英]How can we find the permutations of a n-digit number?

我使用 python 中的列表和循环编写了 4 位数字的排列。

a =list(input("enter a four digit number:"))
n=[]
for i in range (0,4):
    for j in range (0,4):
        if(j!=i):
            for k in range(0,4):
                if(k!=i and k!=j):
                    for w in range (0,4):
                        if(w!=i and w!=j and w!=k):
                            n.append(a[i]+""+a[j]+""+a[k]+""+a[w])


print(n)

如果输入是 1234,则 output 将是所有 1234 的排列,即 24 个排列。 有人可以帮我解决n位数的排列吗? 我希望看到一个 pythonic 解决方案。

置换 [1..N]

import itertools
N = 4 # pick a number to permutate [1..N]
print(list(itertools.permutations(range(1, N + 1))))

现在,如果您想排列任意列表:

import itertools
sample = [1,5,6,2,1]
print(list(itertools.permutations(sample)))

对于 if 循环内的条件,使用条件递归,根据数字的长度应该有动态的 for 循环数,因此使用循环递归方法。 数字在 l 变量中连接当数字集方法中有重复数字时可以使它们不同

#n digit number as input converted into list
f=list(input("enter any number:"))
#dynamic array for dynamic for loop inside recursion 
a=[0 for k in range(len(f))]

c=[]#list which is to be used for append for digits
ans=[]# result in which the 
# recursion for if loop inside for loop
#1st argument is fixed inside the loop
#2nd argument will be decreasing
def conditn(k,m):
    if(m==0):
        return 1
    if(m==1):
        if(a[k]!=a[0]):
            return 1
    if(a[k]!=a[m-1] and conditn(k,m-1)):
        return 1
#recursion for for loop
#1st argument y is the length of the number
#2nd argument is for initialization for the varible to be used in for loop
#3rd argument is passing the list c
def loop(y, n,c):


    if  n<y-1:
        #recursion until just befor the last for loop
        for a[n] in range(y):
            if(conditn(n,n)):

                loop(y, n + 1,c)


    else:
    # last for loop
        if(n==y-1):
            for a[n] in range(y):
            #last recursion of condition
                if(conditn(n,n)):
                #concatinating the individual number
                    concat=""
                    for i in range(y):
                        concat+=f[a[i]]+""
                    c.append(concat)

#returning the list of result for n digit number
    return c 
#printing the list of numbers after method call which has recursion within
#set is used used to convert any of the iterable to the
#distinct element and sorted sequence of iterable elements, 
for j in (set(loop(len(f),0,c))):
    print(j)
    def swapper(s , i,j) :
    lst = list(s)
    
    return "".join(lst)

def solve(string , idx, res) :
    if idx == len(string) :
        res.append(string)
        return 
    
    for i in range(idx, len(string )) :
        lst=list(string)
        lst[i],lst[idx]=lst[idx],lst[i]
        string = "".join(lst)
        solve(string,idx+1,res)
        lst=list(string)
        lst[i],lst[idx]=lst[idx],lst[i]
        string = "".join(lst)

                         
n = 3 
k = 3
lst = []
res = []
for i  in range(1,n+1) :
    lst.append(str(i))
string  = "".join(lst)
solve(string, 0 , res)
res.sort()

n 是您在答案中可能需要的位数 res 将存储数字的所有排列 这是一个简单的 resursion 解决方案:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM