D


私信TA

用户名:ALS1111

访问量:19477

签 名:

等  级
排  名 51
经  验 10946
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

一楼已经有了很简单的题解,这里发一些递归的思路。

递归思路。可以看成一棵树进行递归。

绘图1.png

以3121举例来说。

递归遍历出所有结果。当然结果中有很多不符合条件的数,比如说3111,因此我们需要对递归后的结果进行筛选,把符合条件的筛选出来,进行输出即可。

下面代码中有注释。


注意事项:


参考代码:

def f(temp,count):      #temp为组合排列数,count为temp的位数  
    global n  
    global m  
    global snum  
    global cho  
  
    if count == n:  
        temp_num = [temp[i] for i in range(n)]  
        temp_set = set(temp_num)                     #以下四行判断组合排列数的不重复数字数是否等于输入  
        for i in temp_set:  
            if snum.count(i) != temp_num.count(i):  
                return  
  
        if temp not in cho:  
            cho.append(temp)  
        return  
      
    for i in range(n):  
        temp = temp + snum[i]  
        f(temp,count+1)  
        temp = temp[:-1]  
         
  
if __name__ == '__main__':  
    s = input().strip()               #此处不加strip()会91分报错  
    n = len(s)  
    snum = [s[i] for i in range(n)]  
    m = len(set(snum))                #判断输入的整数一共有多少个不重复的数字  
  
    cho = []             #最后筛选出的全排列的集合  
    temp = ''  
    f(temp,0)  
  
    cho.sort()  
    for item in cho:  
        print(item)


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区