LeetCode算法入門 帕斯卡三角形(楊輝三角) 解法與分析

問題描述:

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

img

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

示例:

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

解法一:

想不到,看了看力扣的大佬回答:

思路:此題只需要採用位運算,每次將原來的數字向左移動1位,就需要把該末尾加到我們的數字中去即可,此題需要注意的是一點要循環32次,不僅是有32位,最重要的不能判斷到原來的數字爲0就結束循環,這樣就有可能的導致沒有補足0所以要循環32次。

同時對於左移而言,末尾全部補上的是0,而對於右移而言左邊補的是原本最高位的數字,比如一個32位的數字最高位(也就是符號位)爲1就全部補上1,如果爲0 就全部補上0.這個知識點也是面試常考的。

代碼如下:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> v(numRows);
        if(numRows>=1){
            v[0].push_back(1);
        }
        if(numRows>=2){
            v[1].push_back(1);
            v[1].push_back(1); 
        }
        for(int i = 2; i < numRows;i++){
            int n = i+1;
            for(int j = 0; j < n; j++){
                if(j == 0 || j == n-1){
                    v[i].push_back(1);
                }
                else{
                    v[i].push_back(v[i-1][j-1] + v[i-1][j]);
                }
            }
        }
        return v;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章