算法

Python实现杨辉三角

2020-02-26  本文已影响0人  李白开水

要实现的杨辉三角:


image.png

方法一:

思路:
申请一个n行的二维数组
打印出n行的依次递增一个元素,且元素都为一列表:

   arr = [[1] * i for i in range(1, n + 1)]
   print(arr)

如下图所示:


image.png

将每一行中,元素下标不为0和不为数组长度的元素(下标为k)的值改为上一个列表下标为n-1和n的值的和:

    n = 10
    arr = [[1] * i for i in range(1, n + 1)]
    # print(arr)
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            # print(arr[i][j])
            if j != 0 and j != len(arr[i]) - 1:
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]
    print(arr)

结果如图:


image.png

最后修改一下输出格式:

    n = 10
    arr = [[1] * i for i in range(1, n + 1)]
    # print(arr)
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            # print(arr[i][j])
            if j != 0 and j != len(arr[i]) - 1:
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]
        print(" ".join(map(lambda x: str(x), arr[i])))

输出:


image.png

方法二:

思路:
同样先打印出n行的依次递增一个元素,且元素都为一列表:

n = 10
an = [1] * n
for i in range(n):
    print(an[0:i+1])

如图:


image.png

因为是要在原数组上做更改,所以逆序输出列表,并将列表相应的值更新:

n = 10
an = [1] * n
for i in range(n):
    # print(an[0:i+1])
    for j in range(i-1,0,-1):
        an[j] = an[j] + an[j-1]
    print(an[0:i+1])

结果:


image.png

维基百科也有实现:
https://zh.wikipedia.org/wiki/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92%E5%BD%A2

上一篇 下一篇

猜你喜欢

热点阅读