LeetCode: Pascal's Triangle II [119]

151 篇文章 0 订阅

【题目】

Given an index k, return the kth row of the Pascal's triangle.

For example, given k = 3,
Return [1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?



【题意】

    给定行索引k, k从0开始,返回该索引指向的杨辉三角的行
    要求只能使用O(k)的额外空间


【思路】


    申请两个k+1大小的数组,交替存储相邻行元素。
    杨辉三角特点的生成方法详见Pascal's Triangle


【代码】

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int>result;
        if(rowIndex<0)return result;
        
        //维护两个rowIndex+1长度的数组, rowIndex为偶数时,行元素存储在row1中;rowIndex为奇数时,行元素存储在row2中
        vector<int> row1(rowIndex+1, 1);
        vector<int> row2(rowIndex+1, 1);
        int indexCount=0;   //当前已经生成的行的行索引
        while(indexCount<rowIndex){
            indexCount++;
            if(indexCount%2==0){
                //当前要从row2生成下一行元素,存到row1中
                //row2有indexCount个元素,row1中有indexCount+1个元素
                for(int i=1; i<indexCount; i++){
                    row1[i]=row2[i-1]+row2[i];
                }
            }
            else{
                //当前要从row1生成下一行元素,存到row2中
                //row1有indexCount个元素,row2中有indexCount+1个元素
                for(int i=1; i<indexCount; i++){
                    row2[i]=row1[i-1]+row1[i];
                }
            }
        }
        //如果rowIndex是偶数,返回row1,否则返回row2
        if(rowIndex%2==0)return row1;
        else return row2;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值