我可以在不使用两个循环的情况下执行此任务吗?
作者:互联网
我试图解决一个简单的问题,我要做的是,
如果n的值为2,则打印
2211
21
或如果n的值为3,则打印
333222111
332211
321
我写的是这个
n=3
for i in range(n,0,-1):
for j in range(n,0,-1):
print(str(j)*i,sep='',end='')
print()
没有两个循环,有什么方法可以执行此任务吗?
或者,是否可以不使用循环将j的值从n迭代到0,并打印每个变化?
解决方法:
不,实际上没有一种方法可以执行此操作,因为该任务涉及一个双循环,但是您可以使其效率更高,例如,使用列表推导来构建每行,因此您每行仅调用一次print.
您可以使用递归,但效率较低,它并不能真正消除循环,而只是以不同的方式实现.
这是包装在函数中的代码的列表comp版本.
def show_pattern(n):
for i in range(n, 0, -1):
print(''.join([str(j)*i for j in range(n, 0, -1)]))
FWIW,这是一种单线版本,效率稍高,但是时间复杂度当然仍然是O(n²).而且我认为您会同意阅读起来有点困难.
标签:python-3-x,time-complexity,python 来源: https://codeday.me/bug/20191025/1924747.html