練習題35-楊輝三角

原題目:
給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:
輸入: 5

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

思路1:首先生成每一個行中列數量都不同的vecotr數組並且將它們賦值爲0,然後用一個二維數組按照規律進行賦值即可。

代碼1;

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        int zone=1;
vector<vector<int>> v(numRows, vector<int>());//初始層數,賦值
for (int i = 0; i < numRows; i++) {
 v[i].resize(zone++);//設置每一層的個數並且賦值爲0;
}
   for (int i = 0; i < numRows; i++) {
        for(int j=0;j<=i;j++)
        {
             if((i<2)||(j==0)||(j==i))
                    v[i][j]=1;
                if(i>=2&&j>0&&j<i)
                {
                    v[i][j]=v[i-1][j]+v[i-1][j-1];
                }
        }
   }
        return v;
    }
};

思路2:
設置一個vec數組來存放每一層的元素,然後用while循環來決定這個二維數組有多少層,用push_back函數將vec數組放入每一層之中,如果每一層的元素超過了2個元素,就用?運算符來判斷哪個元素位置是否超過1,如果超過1,就將這個元素的值變爲這個元素位置當前的值+前一層元素當前位置的值即可。當元素位置等於vec數組最後一個元素位置時,跳到下一層進行賦值。
代碼2:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<int> vec = {1};
        vector<vector<int>> res;
        while (numRows-- > 0)
        {
            res.push_back(vec);
            for (int i = vec.size() - 1; i >= 1; i--)
                vec[i] += (i - 1 >= 0 ? vec[i - 1] : 0);
            vec.push_back(1);
        }
        return res;
    }
};

練習題34-位一的個數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章