解题思路:
一楼已经有了很简单的题解,这里发一些递归的思路。
递归思路。可以看成一棵树进行递归。
以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 人评分
川哥的吩咐 (C++代码)浏览:1054 |
A+B for Input-Output Practice (VII) (C++代码)浏览:635 |
多输入输出练习1 (C语言代码)浏览:1207 |
【排队买票】 (C语言代码)浏览:935 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:601 |
1113题解浏览:818 |
A+B for Input-Output Practice (III) (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:2748 |
ACM俱乐部密码浏览:945 |
WU-程序员的表白 (C++代码)浏览:796 |