LeetCode刷题Easy篇打印杨辉三角(Pascal's Triangle)---动态规划

题目

Example:

Input: 5
Output:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

我的尝试

我的代码因为leetcode缺少list接口的addAll方法,无法测试通过,我的思路是利用动态规划,存储前一行数据,然后遍历,相加得到下一行数据,没有测试,无法验证逻辑

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        triangle.add(new ArrayList<>());
        triangle.get(0).add(1);
        
        List<Integer> firstRowList=new LinkedList();
        firstRowList.add(1);
        firstRowList.add(1);
        triangle.addAll(firstRowList);
        
        int row=2;
        List<Integer> latestList=new LinkedList();
        latestList=list;
        while(row<numRows){
            List<Integer> nextList=new LinkedList();
            nextList.add(1);
            for(int i=0;i<latestList.size()-1;i++){
                nextList.add(latestList.get(i)+latestList.get(i+1));
                if(i==latestList.size()-1){
                 nextList.add(1);
                }
            }
            list.addAll(nextList);
            latestList=nextList;
        } 
        return list;
      
    }
}

正确解法

我的痛点是什么?不知道怎么取出上一行的元素,忽略了,上一行的元素已经存储在全部的list中了。应该从全局list中拿出上一行,然后进行相加,求出当前行的元素。看了代码思路,我尝试写了一下,注意第二行虽然看起来比较特殊,其实一样的逻辑可以处理,因为size不满足,for循环没有添加元素,只是添加了头尾的两个1.

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        if(numRows==0) return triangle;
        triangle.add(new ArrayList<>());
        triangle.get(0).add(1);
    
        for(int i=1;i<numRows;i++){
           List<Integer>  currList=new LinkedList();
           List<Integer> preRowList=triangle.get(i-1);
           currList.add(1);
           for(int j=0;j<preRowList.size()-1;j++){
               currList.add(preRowList.get(j)+preRowList.get(j+1));
           }
           currList.add(1);
           triangle.add(currList);
        }
        return triangle;
      
    }
}

猜你喜欢

转载自blog.csdn.net/hanruikai/article/details/84861088