1. 程式人生 > 實用技巧 >LeetCode c++-- 118.楊輝三角

LeetCode c++-- 118.楊輝三角

題目描述:

給定一個非負整數numRows,生成楊輝三角的前numRows行。

在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:

輸入: 5
輸出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

解題:

class Solution {
public:
    /*
    該題目的主要的考察點在於:
        如何使二維vector陣列的行陣列長度不同
    解決方法:
        1.開闢numRows行 1 列的二維陣列,後續根據每行的資料數量進行擴張
        https://blog.csdn.net/u013040591/article/details/80329066
*/ vector<vector<int>> generate(int numRows) { //初始化二維vector陣列空間大小,並全部初始化為 0 vector<vector<int> > A(numRows,vector<int>(1,1)); //確定每行中資料的長度以及內部儲存的資料,第一二行不需要進行處理 for(int i = 1;i <numRows;i ++) { for( int j = 1;j < i;j ++) {
//計算左上角,上方的和插入 A[i].push_back(A[i-1][j-1]+A[i-1][j]); } //將每列的最後一個數插入到最後 A[i].push_back(1); } return A; } }; //還需要進行加強對於vector等容器的學習
執行用時:4 ms, 在所有C++提交中擊敗了38.74%的使用者 記憶體消耗:6.6 MB, 在所有C++提交中擊敗了50.93%的使用者
//2.另外一種使用resize()進行開闢空間的方法,相比上面第一個方法來效率更快
/*vector<vector<int>> generate(int numRows) { //初始化二維vector陣列空間大小,並全部初始化為 0 vector<vector<int> > A(numRows,vector<int>(1,1)); //確定每行中資料的長度以及內部儲存的資料,第一二行不需要進行處理 for(int i = 1;i <numRows;i ++) { A[i].resize(i+1); for( int j = 1;j < i;j ++) { //計算左上角,上方的和賦值 A[i][j] = A[i-1][j-1]+A[i-1][j]; } //將每列的最後一個數插入到最後 A[i][i] = 1; } return A; } }; */
執行用時:0 ms, 在所有C++提交中擊敗了100%的使用者 記憶體消耗:6.7 MB, 在所有C++提交中擊敗了34.67%的使用者