解题思路:
一楼已经有了很简单的题解,这里发一些递归的思路。
递归思路。可以看成一棵树进行递归。
以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语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:612 |
P1001 (C语言代码)浏览:809 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:459 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:596 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:627 |
【计算两点间的距离】 (C语言代码)浏览:1501 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:533 |
Minesweeper (C语言描述,蓝桥杯)浏览:1133 |
字符串输入输出函数 (C语言代码)浏览:2498 |
循环入门练习6 (C语言代码)浏览:987 |