leetcode 119 杨辉三角 II (c++和python)

目录

题目

解题思路

C++代码

python代码


 

题目

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

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

 

示例 1:

输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:

输入: rowIndex = 0
输出: [1]
示例 3:

输入: rowIndex = 1
输出: [1,1]
 

提示:

0 <= rowIndex <= 33

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

解题思路

  1. 特例,前面两行,i=0行,结果是[1],i=1,结果是[1,1];
  2. 从第三行开始,即i=2开始,每行的开头和结尾值都是1,中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值。

C++代码

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:6.5 MB, 在所有 C++ 提交中击败了7.38%的用户

通过测试用例:34 / 34

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        // 注意,rowIndex是从0开始索引

        // 特例
        if (rowIndex == 0) return {1};
        if (rowIndex == 1) return {1, 1};

        // 从第三行开始,即i=2开始,每行的开头和结尾值都是1
        // 中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值
        vector<vector<int>> total_ans = {{1}, {1,1}};
        for (int i=2; i <= rowIndex; i++)
        {
            vector<int> child_ans = {1};  // 每行开头值都是1
            for (int j=1; j < i; j++)  // 中间值即j=1列到j=i-1列值
            {
                child_ans.push_back(total_ans[i-1][j-1] + total_ans[i-1][j]);
            }
            child_ans.push_back(1);  // 每行结尾值都是1
            total_ans.push_back(child_ans);  // 记录当前行结果
        }
        return total_ans[rowIndex];
    }
};

python代码

执行用时:16 ms, 在所有 Python 提交中击败了64.59%的用户

内存消耗:13.3 MB, 在所有 Python 提交中击败了5.30%的用户

通过测试用例:34 / 34

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        # 注意rowIndx是从0行开始。

        # 特例,前面两行
        if rowIndex == 0: return [1]
        if rowIndex == 1: return [1, 1]

        # 从第三行开始,即i=2开始,每行的开头和结尾值都是1
        # 中间值即j=1列到j=i-1列值都是(i,j) = (i-1,j-1)+(i-1,j),即都是左上角值加上右上角值
        total_ans = [[1], [1,1]]  # 记录上面行结果
        for i in range(2, rowIndex+1):
            child_ans = [1]  # 每行开头值是1
            for j in range(1, i): # 每行中间值都是左上角值加上右上角值
                child_ans.append(total_ans[i-1][j-1] + total_ans[i-1][j])
            child_ans.append(1)  # 每行结尾值是1
            total_ans.append(child_ans)  # 记录当前行结果
        
        return total_ans[-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值