【LeetCode】118. 杨辉三角

题目链接


文章目录

Python3

直觉解法:

python 复制代码
class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        ans = [[1]]
        for _ in range(numRows-1):
            temp1 = []
            temp2 = [0] + ans[-1] + [0]
            for i in range(len(temp2)-1) :
                temp1.append(temp2[i]+temp2[i+1])
            ans.append(temp1)

        return ans 

版本1

以下的理论介绍 可以说和 本题的 代码实现 毫无关系。

这个版本 需要注意 列表的边界

python 复制代码
class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        ans = []
        for i in range(numRows):
            row = []  # 第 i 行
            for j in range(i+1) : # 第 i 行 【0开始】 有 i+1 项
                if j == 0 or j == i: # 为 1 的位置下标 和 行下标 一致 
                    row.append(1) 
                else:
                    row.append(ans[i-1][j]+ans[i-1][j-1])
            ans.append(row)

        return ans 

⭐ 版本2

思路: 前一行 两端 补0 模拟。 结合 动图 理解

python 复制代码
class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        ans = [[1]]
        for _ in range(numRows-1):  # 因为 直接对前一行ans[-1]操作,这里要注意循环次数 第0次循环  获得了 第2行。因此只到 第 numRows-2 次循环
            row = []  # 存储 每行的数 
            temp = [0] + ans[-1] + [0]
            for i in range(len(temp)-1) :
                row.append(temp[i] + temp[i+1])
            ans.append(row)

        return ans 

C++

⭐ 版本

题目 说明至少 一行,可以跳过 第一行的处理

cpp 复制代码
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> ans;  // 这里没有限制长度
        ans.push_back(vector<int>(1, 1));   //  第 1 行
        for (int i = 1; i <= numRows-1; ++i){
            ans.push_back(vector<int>(i+1));  // C++ 不能随便 加元素,要提前说明
            ans[i][0] = ans[i][i] = 1;
            for(int j = 1; j <= i-1; ++j){
                ans[i][j] = ans[i-1][j] + ans[i-1][j-1];
            }
        }
        return ans;
    }
};

官方版本

cpp 复制代码
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> ans(numRows);
        for (int i = 0; i <= numRows-1; ++i){
            ans[i].resize(i+1);  // C++ 不能随便 加长,要提前说明
            ans[i][0] = ans[i][i] = 1;
            for(int j = 1; j <= i-1; ++j){
                ans[i][j] = ans[i-1][j] + ans[i-1][j-1];
            }
        }
        return ans;
    }
};
相关推荐
泽02023 分钟前
LLMChat ----- 通过C++语言调用大语言模型所实现的聊天系统
开发语言·c++·语言模型
黎雁·泠崖4 分钟前
二叉树遍历:LeetCode 144 / 94 / 145 之递归 + 分治 + 非递归
java·数据结构·算法·leetcode
凌波粒5 分钟前
LeetCode--347.前 K 个高频元素(栈和队列)
java·数据结构·算法·leetcode
steem_ding7 分钟前
C++ 回调函数详解
开发语言·c++·算法
会编程的土豆8 分钟前
字符串知识(LCS,LIS)区分总结归纳
开发语言·数据结构·c++·算法
北顾笙98016 分钟前
day25-数据结构力扣
数据结构·算法·leetcode
天若有情67319 分钟前
原创C++设计模式:功能归一化——无继承、轻量版AOP,比传统OOP更优雅
开发语言·c++·设计模式·oop
Q741_14738 分钟前
每日一题 力扣 2515.到目标字符串的最短距离 循环数组 C++题解
c++·算法·leetcode
深邃-40 分钟前
【C语言】-自定义类型:结构体
c语言·开发语言·数据结构·c++·html5
Olivia_0_0_1 小时前
【面试题】C++面试题整理——具身智能 / 自动驾驶 / 嵌入式 / 后台开发通用
c++·面试