triangle给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
例如:
输入: 3
输出:
[
[1],
[1,1],
[1,2,1]
]
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
我们可以机械翻译得
func generate(_ numRows: Int) -> [[Int]] {
if numRows == 0 { return [] }
if numRows == 1 { return [[1]] }
if numRows == 2 { return [[1], [1, 1]]}
var last:[Int] = [1, 1], result:[[Int]] = [[1], [1, 1]]
for i in 1..<numRows - 1 {
last = calnew(result[i])
result.append(last)
}
return result
}
func calnew(_ last: [Int]) -> [Int] {
var result:[Int] = [1]
for i in 1..<last.count {
result.append(last[i] + last[i - 1])
}
result.append(1)
return result
}
整理可得
func generate(_ numRows: Int) -> [[Int]] {
var result = [[Int]]()
for rowIndex in 0..<numRows {
var row = [Int](repeating: 0, count: rowIndex + 1)
(row[0], row[row.count - 1]) = (1, 1)
for j in stride(from: 1, to: row.count - 1, by: 1) {
row[j] = result[rowIndex - 1][j - 1] + result[rowIndex - 1][j]
}
result.append(row)
}
return result
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论