力扣hot100 杨辉三角 递归 DP

Problem: 118. 杨辉三角

力扣hot100 杨辉三角 递归 DP_第1张图片
力扣hot100 杨辉三角 递归 DP_第2张图片
力扣hot100 杨辉三角 递归 DP_第3张图片

文章目录

  • 思路
  • 复杂度
  • DP
  • 从下往上递归

思路

‍ 参考地址

复杂度

时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

DP

class Solution {
	public List> generate(int numRows)
	{
		List> ans = new ArrayList<>();
		ans.add(new ArrayList<>());
		ans.get(0).add(1);//第一行固定是 1
		if (numRows == 0)
			return ans;
		List pre = ans.get(0);// pre记录当前行的前一行
		for (int i = 1; i < numRows; i++)
		{
			List cur = new ArrayList<>();
			cur.add(1);// 左边固定一个 1
			for (int j = 1; j < i; j++)
				cur.add(pre.get(j) + pre.get(j - 1));
			cur.add(1);// 右边固定一个 1
			ans.add(cur);
			pre = cur;
		}
		return ans;
	}
}

从下往上递归

class Solution {
    public List<List<Integer>> generate(int numRows) {
    		//存储要返回的杨辉三角
        List<List<Integer>> dg = new ArrayList<>();
        //若0行,则返回空
        if(numRows == 0){
            return dg;
        }
        //递归出口,这是第一步!找到出口
        if(numRows == 1){
            dg.add(new ArrayList<>());
            dg.get(0).add(1);
            return dg;
        }
        //递归,注意返回值!!!这是第二步
        dg = generate(numRows-1);
        //一级递归要做啥,我们可以看第二行到第三行需要做啥
        //首先是要申请一个list来存储第三行,然后通过第二行得到第三行
        //第三行的首尾为1是确定了的,然后就是中间的数如何得到
        //通过观察很容易拿到for循环里面的式子
        //最后别忘了返回值!!!
        List<Integer> row = new ArrayList<>();
        row.add(1);
        for(int j = 1;j < numRows - 1;j++){
            row.add(dg.get(numRows-2).get(j-1) + dg.get(numRows-2).get(j));
        }
        row.add(1);
        dg.add(row);
        return dg;
    }
}

你可能感兴趣的:(力扣,hot100,leetcode,算法)