Python入门
  • Python入门
  • 0. 基础知识与安装
    • 0. 计算机基础知识
    • 1. Windows下安装
    • 2. 通过软件包管理器安装
    • 3. 通过源码安装
    • 4. 多版本管理
    • 5. Python的基础知识
    • 6. Python的内存管理
  • 1. 基本语法
  • 2. 内置数据结构
    • 1. 列表
    • 2. 元组
    • 3. 字符串
    • 4. bytes与bytearray
    • 5. 集合 (set)
    • 6. 字典
  • 3. 操作
    • 迭代与迭代器
    • 封装与解构
    • 解析式与生成器
    • 切片操作
    • del操作
  • 4. 函数
    • 1. 函数的定义与调用
    • 2. 函数的参数与参数解构
    • 3. 函数的返回值
    • 4. 函数的作用域
    • 5. 闭包
    • 6. 默认值的作用域
    • 7. 递归
  • 5. 高阶函数
    • 0. 柯里化
    • 1. 高阶函数
    • 2. 装饰器
    • 3. 参数注解
  • A. 内建函数
  • B. 算法
    • 1. 排序
      • 1.冒泡法排序
      • 2. 简单选择排序
      • 3. 二元选择排序
  • C. 模块
    • collections
    • copy
    • datetime
    • keyword
    • math
    • time
  • D. 习题
    • 九九乘法表
    • 打印菱形、三角形、闪电
    • 斐波那契数列
    • 求素数
    • 猴子吃桃
    • 杨辉三角
    • 转置矩阵
Powered by GitBook
On this page
  • 代码实现
  • 直接解法
  • 补0法
  • 对称性
  • 单列表解法
  • 运行效果

Was this helpful?

  1. D. 习题

杨辉三角

代码实现

直接解法

# 直接解法
import datetime
start = datetime.datetime.now()
n = 10
yangHui = []
for i in range(0,n):
    yangHui.append([])
    for j in range (i+1):
        yangHui[i].append(1) if (j==0) or (j == i) else  yangHui[i].append(yangHui[i-1][j]+yangHui[i-1][j-1])
print((datetime.datetime.now()-start).total_seconds())
for i in range(n):
    for j in range (i+1):
        print(yangHui[i][j],end=" ")
    print()

补0法

oldline = [1]
print(oldline)
for i in range (1, 10):
    oldline.append(0)
    newline = []
    for j in range(i+1):
        newline.append(oldline[j-1] + oldline[j])
    print(newline)
    oldline = newline

对称性

trangle = [[1],[1,1]]
for i in range (2, 10):
    row = [1] * (i + 1)
    trangle.append(row)
    for j in range (i//2):
        row[j+1] = trangle[i-1][j] + trangle[i-1][j+1]
        if i%2 == 0 and (j+1) == i//2:
            continue
        row[-j-2] = row[j+1]
print(trangle)

单列表解法

n = 10
line = [1] * n
for i in range (n):
    offset = n - i
    swap = 1
    for j in range(1, i//2+1):
        val = line[j] + swap
        swap = line[j]
        line[j] = val
        if i != 2 * j:
            line[-j - offset] = val
    print(line[:i+1])

运行效果

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
Previous猴子吃桃Next转置矩阵

Last updated 6 years ago

Was this helpful?