lletcode杨辉三角II

1.暴力解法

设二维数组存储元素,并利用A[i][j]=A[i-1][j-1]+A[i-1][j]

代码如下:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
      if(rowIndex==0)
        return {1};
       vector<vector<int>> res (rowIndex+1,vector<int>(rowIndex+1,0));
       res[0][0]=1;
       res[1][0]=1;
       res[1][1]=1;
       for(int i=2;i<=rowIndex;i++)
         for(int j=0;j<=i;j++)
           if(j==0||j==i)
             res[i][j]=1;
           else
             res[i][j]=res[i-1][j-1]+res[i-1][j];
        return res[rowIndex];
           
    }
};

2.观察法

用一维数组存储结果

观察第0行   1

观察第1行   1 1        //是在上一行后面添加了1

观察第2行   1 2  1    // 是在上一行后面加1,此时数组为1 1 1,令A[1]=A[0]+A[1],即2=1+1,

观察第3行   1 3 3  1  //首先在上一行末尾加1,此时数组为 1 2 1 1,令A[2]=A[1]+A[2]=2+1=3,A[1]=A[0]+A[1]=1+2=3

第四行 1 4 6 4 1   //在上一行末尾加1,1 3 3 1 1,A[3]=A[2]+A[3]=3+1=4,A[2]=A[1]+A[2]=3+3=6,A[1]=A[0]+A[1]=1+3=4

扫描二维码关注公众号,回复: 9870066 查看本文章

....

之后的每一行,首先在数组末尾添加元素1,

然后对于该行,如果不是第一个或最后一个元素,设为j元素,则A[j]=A[j-1]+A[j]

代码如下:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
       vector<int> res;
        for(int i = 0; i <= rowIndex; ++i){
            res.push_back(1);
            for(int j = i - 1; j > 0; --j){
                res[j] += res[j - 1];
            }
        }
        return res;  
    }
};

3.数学公式法

杨辉三角可以看成由组合数构成

其中:

且:

此时,设置pre保存上一次的结果,然后遍历即可

代码如下:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
       vector<int> res;
       long pre=1;
       res.push_back(1);
        for(int i = 1; i <= rowIndex; ++i){
            long cur=pre*(rowIndex-i+1)/i;
            res.push_back((int)cur);
            pre=cur;
            }
        return res;  
    }
};
发布了191 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/104788948