🔺 杨辉三角
把一排数字堆成三角形:最外面都是 1,里面每个数都等于「上面两个数加起来」。这个奇妙的三角藏着组合数的密码——第 n 行的数加一加是 2 的 n 次方,拆开 (a+b) 的乘方也会露出它的影子。
考纲知识点:杨辉三角的定义
杨辉三角形的实现
杨辉三角形的实现
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 八级
- (3)掌握杨辉三角形(又称帕斯卡三角形)的概念。
📚
先学一学
花 6 分钟读完下面 5 课,再去闯关就不慌啦
1
🧱 一块块数字砖头:两条规则
杨辉三角(外国叫帕斯卡三角形)排成一个三角形,只要记住两条规则:① 最外面(两边)都是 1;② 里面的每个数 = 它上面两个数的和。
📐 看前几行
第0行: 1
第1行: 1 1
第2行: 1 2 1
第3行: 1 3 3 1
第4行: 1 4 6 4 1
第1行: 1 1
第2行: 1 2 1
第3行: 1 3 3 1
第4行: 1 4 6 4 1
看第 4 行的 6:它上面是第 3 行的 3 + 3 = 6。两边永远是 1。
💡 口诀:杨辉三角真奇妙,两边都是 1 宝宝;中间每个数,上边两数加起来。
2
✨ 每行加起来:2 的 n 次方
➕ 把每一行加一加
第 0 行:1 → 1 = 2⁰
第 1 行:1+1 = 2 = 2¹
第 2 行:1+2+1 = 4 = 2²
第 3 行:1+3+3+1 = 8 = 2³
第 4 行:1+4+6+4+1 = 16 = 2⁴
所以第 n 行所有数之和 = 2 的 n 次方。
第 1 行:1+1 = 2 = 2¹
第 2 行:1+2+1 = 4 = 2²
第 3 行:1+3+3+1 = 8 = 2³
第 4 行:1+4+6+4+1 = 16 = 2⁴
所以第 n 行所有数之和 = 2 的 n 次方。
💡 口诀:每行求和真方便,二的小 n 次方(第 n 行 = 2ⁿ)。
🎯 考一考
第 10 行所有数加起来 = 2¹⁰ = 1024。记住从第 0 行开始数哦!
3
🎰 杨辉三角 = 组合数表 = 二项式系数
🧩 第 n 行第 k 个数 = C(n,k)
从 n 个东西里选 k 个的组合数 C(n,k),正好站在杨辉三角第 n 行第 k 个。比如第 4 行是 1 4 6 4 1:C(4,0)=1、C(4,1)=4、C(4,2)=6、C(4,3)=4、C(4,4)=1。
💡 口诀:三角藏组合,第 n 行第 k 个 = C(n,k)。
📦 拆 (a+b) 的乘方
(a+b)² = 1·a² + 2·ab + 1·b²,系数是 1 2 1 → 第 2 行。
(a+b)³ = 1·a³ + 3·a²b + 3·ab² + 1·b³,系数 1 3 3 1 → 第 3 行。
所以这些系数叫二项式系数。两边规则「上面两数相加」就是组合数的加法 C(n,k)=C(n−1,k−1)+C(n−1,k)。
(a+b)³ = 1·a³ + 3·a²b + 3·ab² + 1·b³,系数 1 3 3 1 → 第 3 行。
所以这些系数叫二项式系数。两边规则「上面两数相加」就是组合数的加法 C(n,k)=C(n−1,k−1)+C(n−1,k)。
💡 口诀:拆 (a+b)ⁿ 看系数,杨辉三角来帮忙。
4
💻 程序怎么盖「数字砖头」
🏢 二维数组版:一行行存
看得懂就好,不用背:
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++) {
if (j == 1 || j == i) a[i][j] = 1; // 两边是 1
else a[i][j] = a[i-1][j-1] + a[i-1][j]; // 中间=上两数之和
}
for (int j = 1; j <= i; j++) {
if (j == 1 || j == i) a[i][j] = 1; // 两边是 1
else a[i][j] = a[i-1][j-1] + a[i-1][j]; // 中间=上两数之和
}
a[i][j] = a[i-1][j-1] + a[i-1][j] 就是「我=左上+右上」——和口诀一模一样。
💨 一维数组版:一行滚动更新
为了省内存,只用一行数组从右往左更新:a[j] += a[j-1]。因为从右往左算,右边的旧值还没被覆盖,正好留给下一格用。
for (int i = 0; i < n; i++) {
a[i] = 1;
for (int j = i - 1; j > 0; j--) a[j] += a[j - 1];
}
a[i] = 1;
for (int j = i - 1; j > 0; j--) a[j] += a[j - 1];
}
两个版本都是两层循环,规模 n 行 → 大约做 n²/2 次加法,所以时间复杂度 O(n²)。
💡 口诀:二维存整座三角,一维滚动省内存;都要两重循环,时间 O(n²)。
5
🇨🇳 中国数学的骄傲 + 藏在格子路里
📜 历史上叫「贾宪三角 / 杨辉三角」
中国数学家贾宪在北宋就研究过它,南宋杨辉把它写进《详解九章算法》,所以叫杨辉三角;欧洲帕斯卡比这晚了几百年才重新发现,外国也叫帕斯卡三角形。这是我们中国古代数学的伟大成就!
🗺️ 走格子路线也是它
从网格左上角出发,只能向右、向下走到右下角,走法数也等于组合数/杨辉三角里的数。很多「从一个点走到另一个点有几种走法」的题目,其实就是在搭杨辉三角:ways[x][y] = ways[x-1][y] + ways[x][y-1]。
🌟 行业实际
抽奖概率计算、彩票组合、二项分布、图像里的「帕斯卡金字塔」、AI 里的组合特征——都离不开这张「数字砖头表」。程序员把它存在数组里现查现用,比每次重新算快得多。
🎯
闯关小锦囊 · 考点提醒
- 两条规则:两边是 1;中间 = 上面两数之和(即 a[i][j] = a[i-1][j-1] + a[i-1][j])。
- 从第 0 行开始数:第 n 行所有数之和 = 2ⁿ。
- 第 n 行第 k 个 = 组合数 C(n,k);(a+b)ⁿ 展开系数就是第 n 行。
- 二维数组填三角:两重循环 O(n²);一维滚动更新用 a[j] += a[j-1],要从右往左。
- 只走右/下的网格路线数 = 组合数(也是杨辉三角)。
- 杨辉三角也叫帕斯卡三角形,源自中国贾宪/杨辉的成就。
🎮
学完了?来闯关!
下面 15 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。