刷题-力扣-119

119. 杨辉三角 II

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

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

输入: 3
输出: [1,3,3,1]

进阶:

  • 你可以优化你的算法到 O(k) 空间复杂度吗?

题目分析

  1. 根据题目描述杨辉三角形每一行从左到右依次是“组合”
  2. combiner是用来计算组合的结果
  3. 依次遍历每一行从左到右

代码

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> res;
        for (int i = 0; i <= rowIndex; i++) {
            res.push_back(combiner(rowIndex, i));
        }
        return res;
    }
private:
    long double combiner(int n, int m) {
        if (n == m || m == 0) return 1;
        long double numerator = 1;
        long double denominator = 1;
        m = n - m > m ? m : n - m;
        for (int i = 1; i <= m; i++) {
            denominator *= i;
        }
        for (int i = n; i > n - m; i--) {
            numerator *= i;
        }
        return numerator / denominator;
    }
};
posted @ 2021-02-12 20:14  韩亚光  阅读(40)  评论(0编辑  收藏  举报