給定一個非負整數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