线路排列问题。(有人可以提出一个更省时的解决方案吗?)

从 1 开始的正整数按行排列。第 i 行有 i 个数字。例如,前四行是:


1 | 2, 3 | 4, 5, 6 |7, 8, 9, 10


编写一个函数,它接受参数“L”并返回此排列的第 L 行。


这是我的方法:


def find_line(l):

    array = []

    x = 1

    for i in range(1, l + 1):

        while len(array) != I:

            array.append(x)

            x += 1 

            if i == l:

                return array

            else:

                array = []


不负相思意
浏览 117回答 3
3回答

慕尼黑5688855

你不需要循环。您可以通过对系列进行求和来直接计算组中的第一个数字:start =  1 + (n * (n + 1)) // 2如果您希望 n 从 开始,1而不是0需要从 n 中减去。def group(n):    n -= 1    start =  1 + (n * (n + 1)) // 2    return list(range(start, start + n +1))# try it on first 10 numbers: for i in range(1, 10):    print(group(i))这将打印:[1][2, 3][4, 5, 6][7, 8, 9, 10][11, 12, 13, 14, 15][16, 17, 18, 19, 20, 21][22, 23, 24, 25, 26, 27, 28][29, 30, 31, 32, 33, 34, 35, 36][37, 38, 39, 40, 41, 42, 43, 44, 45]join如果需要字符串,可以使用或类似的。

UYOU

好吧,我想展示它背后的数学原理。让我们计算行号 n 的最后一项的表达式。1 |   2  |    3    |      4     | .....line numbers--+------+---------+------------+------1 | 2, 3 | 4, 5, 6 | 7, 8, 9, 10| .....values对于 n=1 (即行号 1),last=1 所以 last(1) = 1。现在让我们说last(n)表示第 n 行的最后一个值,然后: -last(n) = last(n-1) + n例如,对于第 4 行,n=4,我们有last(4) = last(3) + 4 = 6 + 4 因此,展开递归,我们有:-last(n) = last(n-1) + n        = (last(n-2) + n-1) + n        = last(1) + 2 + 3 + ....+ n-1 + n        = 1 + 2 + 3 + ....+ n-1 + n        = n*(n+1)/2Thus, last(n) = n*(n+1)/2由于第 n 行有 n 个值,因此我们可以从第 n 行开始:-start(n) = last(n) - n + 1ORstart(n) = n*(n-1)/2 + 1或者,您也可以将 start(n) 设为:-start(n) = start(n-1) + n-1         = start(n-2) + n-2 + n-1         = start(1) + 1 + 2 + 3 + ....+ n-2 + n-1         = 1 + (1 + 2 + 3 + ... + n-2 + n-1)         = 1 + (n-1)*n/2start(n) = n*(n-1)/2 + 1休息一下就可以循环运行了loop from i=0 to i=n-1 :     print( start(n) + i )

慕雪6442864

def find_line(l):  starting_num = 1  res = []  for count in range (l):   starting_num += count   res = list(range(starting_num, starting_num+l))  return res测试 l=5 的函数:print(find_line(5))[11, 12, 13, 14, 15]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python