解题思路:
一楼已经有了很简单的题解,这里发一些递归的思路。
递归思路。可以看成一棵树进行递归。
以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语言代码)浏览:1394 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:685 |
C语言训练-自由落体问题 (C语言代码)浏览:1775 |
字符串对比 (C语言代码)浏览:1471 |
wu-理财计划 (C++代码)浏览:907 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:702 |
1118(求助_已解决)浏览:351 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:799 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:494 |