30,336
社区成员
发帖
与我相关
我的任务
分享
问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
输入格式
仅有一个数:N ≤ 26。
输出格式
请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
习惯递归后第一个想法就是递归(但是很费时间和空间)
import time
ls =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
n = int(input())
start = time.perf_counter()
def output(n):
if n == 1:
return 'A'
else:
return output(n-1)+ls[n-1]+output(n-1)
print(output(n))
end = time.perf_counter()
print(end-start)
改用循环将时间复杂度降为O(n)
import time
ls =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
str1 = 'A'
str2 = 'ABA'
n = int(input())
start = time.perf_counter()
if n == 1:
print(str1)
elif n == 2:
print(str2)
else:
for i in range(3,n+1):
str2 = str2 + ls[i-1] + str2
print(str2)
end = time.perf_counter()
print(end-start)