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

给定一个非负整数 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 算法合集地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个非负整数 numRows,生成杨辉三角(在杨辉三角中,每个数是它左上方和右上方的数的和。)的前 numRo...
    无名指666阅读 474评论 0 0
  • 题目描述 Given numRows, generate the first numRows of Pascal'...
    静水流深ylyang阅读 1,321评论 0 1
  • 【Description】给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,...
    Chiduru阅读 212评论 0 0
  • 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的...
    习惯了_就好阅读 460评论 0 0
  • 什么是杨辉三角 在杨辉三角中,每个数是它左上方和右上方的数的和。如下图所示。 题目 题目1:给定一个非负整数 nu...
    雁阵惊寒_zhn阅读 505评论 0 2