題目鏈接
Python3
直覺解法:
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
以下的理論介紹 可以說和 本題的 代碼實現(xiàn) 毫無關系。
這個版本 需要注意 列表的邊界
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 模擬。 結合 動圖 理解文章來源:http://www.zghlxwxcb.cn/news/detail-723471.html
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
ans = [[1]]
for _ in range(numRows-1): # 因為 直接對前一行ans[-1]操作,這里要注意循環(huán)次數(shù) 第0次循環(huán) 獲得了 第2行。因此只到 第 numRows-2 次循環(huán)
row = [] # 存儲 每行的數(shù)
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++
? 版本
題目 說明至少 一行,可以跳過 第一行的處理文章來源地址http://www.zghlxwxcb.cn/news/detail-723471.html
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;
}
};
官方版本
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;
}
};
到了這里,關于【LeetCode】118. 楊輝三角的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!