python 实现 无相邻重复子串的所有字符串
(1)描述:编写程序,产生由1,2,3这3个数字符号所构成、长度为n的字符串,并且在字符串中对于任何一个子串而言,都不会有相邻的、完全相同的子串;(2)输入:字符串长度n;(3)输出:无相邻重复子串的所有字符串,每个字符串换行输出。实现思路:使用排列组合,当用户输入n,一共有333*…3*3=3**n种排列,去掉相邻重复的元素,最后得到最后的结果import itertoolsimport mat
·
(1)描述:编写程序,产生由1,2,3这3个数字符号所构成、长度为n的字符串,并且在字符串中对于任何一个子串而言,都不会有相邻的、完全相同的子串;
(2)输入:字符串长度n;
(3)输出:无相邻重复子串的所有字符串,每个字符串换行输出。
实现思路:
使用排列组合,当用户输入n,一共有333*…3*3=3**n种排列,去掉相邻重复的元素,最后得到最后的结果
import itertools
import math
def func():
try:
number = input("请输入位数number:")
if number == '':
print("输入非法,请重试")
return
number = int(number)
if number <= 2 or number >= 11:
print("输入非法,请重试")
return
result = set()
for turtle in itertools.product('123', repeat=number):
result = handleRepeated(turtle, result, number)
result = list(result)
result.sort()
print('求得元素总长度:%s' % len(result))
for item in result:
print(item)
except Exception as e:
print('输入非法,请重新输入!',e)
def handleRepeated(turple,result,number):
index = 0
for i,iValue in enumerate(turple):
for j, jValue in enumerate(turple):
if j == (i+1) and math.fabs(int(jValue)-int(iValue)) >= 1:
index+=1
if index == number -1:
tmp = ''
for im in turple:
if ('1' in turple) and ('2' in turple) and ('3' in turple):
tmp+=str(im)
if tmp != '':
result.add(int(tmp))
return result
if __name__ == '__main__':
func()
实现效果:
更多推荐
已为社区贡献1条内容
所有评论(0)