119. Pascal's Triangle II

本文介绍了一种高效算法,用于计算帕斯卡三角形中指定行的元素,仅使用O(k)额外空间。该算法适用于编程竞赛及实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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?

Subscribe to see which companies asked this question.

惯例翻译题目:给出帕斯卡三角第n行的行数,然后输出这一行,要求只能使用O(k)的空间;

思路:

这里需要注意,它的行数是从0开始,所以给出的行数如果是numRows,其实是第numRows+1行;

第一第二行做判定,输入为0或者1则直接赋值然后输出;

如果numRows大于或者等于2,则逐行计算;这就是外层循环了;从第三行开始,对应numRows=2;

到numRows行;

内层循环则是从第二个元素开始,坐标为i元素等于之前的vals[i-1]+vals[i],然后将这个数存储在一个临时变量tmp里面;

一开始也有一个临时变量temp初始化为0;然后把temp赋值给vals[i-1],这个时候可以改变是因为下一个元素的生成已经用不到它了;

然后再把tmp的值赋值给temp;

最后做一个判断当时的元素是不是每一行的倒数第二个元素,如果是,说明已经不用再继续计算下去,直接将计算得到的tmp的值赋值给对应的位置;

最后末尾添加一个元素,赋值为1;

以下为代码:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> vals;
        vals.resize(rowIndex+1);
        int i,j,k,temp,tmp;
        if(rowIndex<2){
            if(rowIndex==0){
                vals[0]=1;
                return vals;
            }
            else{
                vals[0]=1;
                vals[1]=1;
                return vals;
            }
        }
        else{
            vals[0]=1;
            vals[1]=1;
            
            for(j=2;j<=rowIndex;j++){
                temp=vals[0];
            for(i=1;i<j;i++){
                tmp=vals[i-1]+vals[i];
                vals[i-1]=temp;
                temp=tmp;
                if(i==j-1){
                    vals[i]=temp;
                    vals[j]=1;
                    
                }
                
            }
        }
        return vals;
        
    }
}
};

期间发生的错误:

注:这道题不存在空的情况;

1.编码习惯问题,一开始先写了内层循环,添加外层循环后大括号少了一个;

2.用到vector的时候需要为其分配空间,分配错误会出错,不分配也会出错;

错误为下面这个:


室友说其实算一半就行,后面的跟前面的一样,这个倒是省力气;

补充:看了下别人的,O(k)的限制在于不能用二维数组,只能用一维数组滚动运算;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值