PascalTriangle

来源:互联网 发布:暖气管道钥匙 淘宝 编辑:程序博客网 时间:2024/05/17 21:41

问题描述:输出指定行数的帕斯卡三角形,要使用List<List<Integer>>存储。


解决:先知道帕斯卡三角形的特点 

1.第一行元素为[1]

2.每一行的首尾元素都是1

3.每一行除首尾以外的元素都是其上一行的左右元素之和。


第一点和第二点实现起来都不难,为实现第三点,我们定义pre为上一行的引用,cur为当前行引用。根据pre中元素值来计算出cur。当cur计算完成后,pre=cur来继续计算下一行。时间复杂度为o(1+2+3+...+n) = o(n^2)。


/* * Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [     [1],    [1,1],   [1,2,1],  [1,3,3,1], [1,4,6,4,1]] */import java.util.ArrayList;import java.util.List; public class PascalTriangle {    public List<List<Integer>> generate(int numRows) {        List<List<Integer>> res = new ArrayList<>();        if(numRows <= 0)                return res;        List<Integer> pre = new ArrayList<Integer>();       //初始化第一行        pre.add(1);        res.add(pre);        for(int i=2; i<=numRows; i++) {                List<Integer> cur = new ArrayList<>();         //首元素为1                cur.add(1);         //计算中间元素                for(int j=0; j<pre.size()-1; j++) {                        cur.add(pre.get(j) + pre.get(j+1));                }         //尾元素为1                cur.add(1);         //每计算完成一行添加到res中                res.add(cur);         //pre重新指向                pre = cur;        }        return res;    }}



原创粉丝点击