IOS 算法(基础篇) ----- 杨辉三角I

2021-01-13  本文已影响0人  ShawnAlex

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

triangle

在杨辉三角中,每个数是它左上方和右上方的数的和。

例如:
输入: 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 算法合集地址

上一篇下一篇

猜你喜欢

热点阅读