leetcode 119. 杨辉三角 II(Pascal's Triangle II)

本文深入解析了杨辉三角的算法实现,特别聚焦于如何通过优化达到O(k)的空间复杂度。提供了两种高效算法的代码示例,一种使用动态规划的思想,另一种利用数学公式直接计算,避免了不必要的空间占用。

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 3
输出: [1,3,3,1]

进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

 

 

 

题目说用O(k)的空间,就尝试用了

 

 

 

class Solution {
    public List<Integer> getRow(int rowIndex) {
    	int[] dp = new int[35];
    	List<Integer> list = new ArrayList<>();
    	dp[0] = 1;
    	for(int i=1;i<=rowIndex;i++) {
        	for(int j=i;j>=1;j--) {
        		if(j==i)
        			dp[j]=1;
        		else
        			dp[j]=dp[j]+dp[j-1];
        	}
    	}
    	for(int i=0;i<=rowIndex;i++)
    		list.add(dp[i]);
        return list;
    }
}

 

beat 100%

 

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> result = new ArrayList<>(rowIndex + 1);
        int half =rowIndex / 2;
        for (int i=0; i<=half; i++) {
            if (i == 0) {
                result.add(1);
            } else {
                long res = 1L * result.get(i-1) * (rowIndex + 1 - i) / i;
                result.add((int) res);
            }
        }
        for (int j = half + 1; j <= rowIndex; j++) {
            result.add(result.get(rowIndex - j));
        }
        
        return result;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值