其他分享
首页 > 其他分享> > 我可以在不使用两个循环的情况下执行此任务吗?

我可以在不使用两个循环的情况下执行此任务吗?

作者:互联网

我试图解决一个简单的问题,我要做的是,
如果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