给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]
]
解法
思路1:循环遍历
public List<List<Integer>> generate(int numRows) {List<List<Integer>> res = new ArrayList<List<Integer>>();if(numRows<1) {return res;}List<Integer> list = new ArrayList<Integer>();list.add(1);res.add(list);for(int i=2;i<=numRows;i++) {List<Integer> pre = res.get(res.size()-1);List<Integer> cur = new ArrayList<Integer>();for(int j=0;j<i;j++) {if(j==0) {cur.add(pre.get(0));}else if (j ==i-1) {cur.add(pre.get(pre.size()-1));}else {cur.add(pre.get(j-1)+pre.get(j));}}res.add(cur);}return res;}
思路1代码优化
/*** 时间复杂度O(n^2)* 空间复杂度O(n^2)* @param numRows* @return*/
public List<List<Integer>> generate(int numRows) {List<List<Integer>> res = new ArrayList<List<Integer>>();if(numRows<1) {return res;}res.add(new ArrayList<Integer>());res.get(0).add(1);for(int i=2;i<=numRows;i++) {List<Integer> pre = res.get(res.size()-1);List<Integer> cur = new ArrayList<Integer>();//每一行头,总是为1cur.add(1);for(int j=1;j<i-1;j++) {cur.add(pre.get(j-1)+pre.get(j));}cur.add(1);//每一行尾,总是为1res.add(cur);}return res;}
思路2:递归
暂时无实现,后续补上