解题思路:
一楼已经有了很简单的题解,这里发一些递归的思路。
递归思路。可以看成一棵树进行递归。
以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语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:740 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:636 |
【蟠桃记】 (C语言代码)浏览:698 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:571 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:906 |
Wu-求圆的面积 (C++代码)浏览:1987 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:566 |
printf基础练习2 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:411 |
【计算直线的交点数】 (C语言代码)浏览:980 |