【LeetCode】解题119:Pascal's Triangle II

Problem 119: Pascal’s Triangle II [Easy]

Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal’s triangle.

Note that the row index starts from 0.


In Pascal’s triangle, each number is the sum of the two numbers directly above it.

Example:

Input: 3
Output: [1,3,3,1]

Follow up:

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

来源:LeetCode

解题思路

在上一题题解118:Pascal’s Triangle中,计算每一层都保留了上一层的结果,空间复杂度为 O ( 2 k ) O(2k) O(2k)。本题中要求只使用 O ( k ) O(k) O(k)的额外空间,则可以进一步使用动态规划的思想,只需保存一个数组,每一层计算时从后往前计算,num(j)只需要用到num(j)和num(j-1),而且修改num(j)后不会影响到num(j-1)的计算,因此只需要 O ( k ) O(k) O(k)的空间即可。
原118题的公式为:
n u m ( i , j ) = { 1 j = 0 ; 1 j = i ; n u m ( i − 1 , j − 1 ) + n u m ( i − 1 , j ) o t h e r w i s e . num(i, j) = \begin{cases} 1 & j = 0;\\ 1 & j = i;\\ num(i-1, j-1) + num(i-1, j) & otherwise. \end{cases} num(i,j)=11num(i1,j1)+num(i1,j)j=0;j=i;otherwise.
其中, n u m ( i , j ) num(i,j) num(i,j)代表第 i i i层第 j j j个数。
更新后的公式为:
n u m ( j ) = { 1 j = 0 ; 1 j = i ; n u m ( j − 1 ) + n u m ( j ) o t h e r w i s e . num(j) = \begin{cases} 1 & j = 0;\\ 1 & j = i;\\ num(j-1) + num(j) & otherwise. \end{cases} num(j)=11num(j1)+num(j)j=0;j=i;otherwise.
其中, i i i代表层数, n u m ( j ) num(j) num(j)代表每一层第 j j j个数,数组 n u m num num的更新是in-place的。

运行结果:
在这里插入图片描述
要点:动态规划

Solution (Java)

class Solution {
    public List<Integer> getRow(int rowIndex) {
        int[] num = new int[rowIndex+1];
        for(int i = 0; i < rowIndex+1; i++){
            num[i] = 1;
            for(int j = i-1; j > 0; j--){
                num[j] = num[j] + num[j-1];
            }
            num[0] = 1;
        }
        return Arrays.stream(num).boxed().collect(Collectors.toList());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值