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; }}
阅读全文
0 0