给定一个非负整数numRows,生成杨辉三角的前numRows行。
在杨辉三角中,每一个数是它左上方和右上方的数的和。java
示例:算法
输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
来源:力扣(LeetCode)
连接: https://leetcode-cn.com/problems/pascals-triangle
著做权归领扣网络全部。商业转载请联系官方受权,非商业转载请注明出处。
根据杨辉三角形特征:数组
由此咱们能够推算出,只要知道上面一行的全部元素,就能求出当前行的元素网络
在这一题很简单,固然是对于数组和循环来讲。用递归就稍微难了一些。
首先,先设置一个保存全部行的List,而后排出第一行,剩下的按照特征添加元素。spa
/** * @ClassName Solution * @Description 杨辉三角 * @Author XXX * @Date 2020/3/31 20:08 * @Version 1.0 **/ public class Solution { public List<List<Integer>> generate(int numRows) { //杨辉三角总和 List<List<Integer>> all = new ArrayList<>(numRows); //判断numRows是否是为小于1的数 if(numRows <= 0) { return all; } //第一行老是为1 all.add(new ArrayList<>()); all.get(0).add(1); //新一行 List<Integer> newRow = null; //上一行 List<Integer> previous = null; for (int i = 1; i < numRows; i++) { newRow = new ArrayList<>(); if (i == 1) { //每个行第一个元素老是1 newRow.add(1); //每一行最后一个元素老是1 newRow.add(1); } else { previous = all.get(i-1); //每个行第一个元素老是1 newRow.add(1); //添加中间元素 for (int b = 1; b < i; b++) { newRow.add(previous.get(b-1) + previous.get(b)); } //每一行最后一个元素老是1 newRow.add(1); } //将新一行的数据添加到list all.add(newRow); } return all; } }
说实话,这个算法不算是递归,应该还属于循环,因为尚未想出来递归到底怎么写才好,因此只能暂时这样写。code
用时:1ms
内存消耗:37.6MBblog