打印杨辉三角
杨辉三角
问题描述
打印下图所示的杨辉三角:
设计思路
杨辉三角的特点:
第i行有i个数,且每行的第一个数和最后一个数都是1;
每行除了第一个数和最后一个数,其余各数都是其两肩上的数之和。
如果将所有的数存在一个二维数组a[n][n]中,则有: a[i][1] = a[i][i] = 1(i = 1, 2, 3, ……,n) a[i][j] = a[i - 1][j - 1] + a[i - 1][j](i = 3, 4, 5, ……,n;j = 2, 3, ……,i - 1)
为了打印输出左右对称的等腰数字三角形,可以设置二重循环,其中,外层循环设置循环变量i 控制打印所有行,每行打印30 - 2 * i个前导空格;内层循环设置循环变量j控制打印第i行的所有数。
Swift 3.0 代码实现
func printYanghuiTriangle(n: Int) {
var a = [[Int]](repeating: [Int](repeating: 0, count: n + 1), count: n + 1)
for i in 1...n {
a[i][1] = 1
a[i][i] = 1
}
for i in 3...n {
for j in 2...(i-1) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
}
}
for i in 1...n {
for _ in 1...(30 - 2 * i) {
print(" ", terminator:"")
}
for j in 1...i {
print(a[i][j], " ", terminator:"")
}
print("")
}
}
printYanghuiTriangle(n: 9)
算法理解
for i in 3...n {
for j in 2...(i-1) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
// 不是 a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1]
// 因为被空格隔开了,所以,计算时,上一行的后一个数不是j+1列,而是第j列
}
}