118. Pascal's Triangle(python+cpp)
阿新 • • 發佈:2018-12-17
題目:
Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle. In Pascal’s triangle, each number is the sum of the two numbers directly above it. Example:
Input: 5 Output: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
解釋:
其實就是楊輝三角,每個數等於它上方兩數之和。
每行數字左右對稱,由1開始逐漸變大,第n行的數字有n項。
題意:每一層的第i
i-1
與第i
個位置之和。
思路:設定rowlist
是每一層的陣列,臨時陣列為上一層的陣列首尾各加0,rowlist
第i
個值為臨時陣列第i
和i+1
之和 。
用臨時陣列更方便。
python程式碼:
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
result=[]
temp=[0,1]
for i in xrange (numRows):
rowlist=[]
for j in xrange(len(temp)-1):
rowlist.append(temp[j]+temp[j+1])
result.append(rowlist)
temp=rowlist[:]
temp.insert(0,0)
temp.append(0)
return result
其實不用臨時陣列也行,可以節省空間,對於每一行,剛開始先最左邊的元素和最右邊的元素為1,然後值更新最中間的元素的值即可。 python程式碼:
class Solution:
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
result=[]
for numRow in range(numRows):
tmp=[0]*(numRow+1)
tmp[0]=1
tmp[-1]=1
for i in range(1,len(tmp)-1):
tmp[i]=result[numRow-1][i-1]+result[numRow-1][i]
result.append(tmp)
return result
c++程式碼:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> result;
for (int i =0;i<numRows;i++)
{
vector<int> tmp(i+1,0);
tmp[0]=1;
tmp[i]=1;
for (int j=1;j<i;j++)
{
tmp[j]=result[i-1][j-1]+result[i-1][j];
}
result.push_back(tmp);
}
return result;
}
};
總結: 主要要注意的還是指標方面的細節。