1. 程式人生 > >118. Pascal's Triangle(python+cpp)

118. Pascal's Triangle(python+cpp)

題目:

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,rowlisti個值為臨時陣列第ii+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;
    }
};

總結: 主要要注意的還是指標方面的細節。