题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/67/
题目描述:
帕斯卡三角形
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
思路:自己想想不到怎么写。参考了别人的代码。感觉思路好清晰。
首先,用一tmp 列表来放每一行。再用内循环放每个元素,这个很好想到。每次开始放之前,都先把1放进去先,关键在于1.判断跳出的条件j<i 。2.每次存放上一行数据的列表。我一直没想到如何获取上一次的列表,其实还是对List<List<T>>的操作不熟悉。
class Solution {
public List<List<Integer>> generate(int numRows) {
List< List<Integer> > triangle = new ArrayList< List<Integer> >();
if(numRows==0)return triangle;
List<Integer> tmp1=new ArrayList<Integer>();
tmp1.add(1);
triangle.add(tmp1);
for(int i=1;i<numRows;i++){
List<Integer> last=triangle.get(i-1);
List<Integer> tmp=new ArrayList<Integer>();
tmp.add(1);
for(int j=1;j<i;j++){
tmp.add( last.get(j-1)+last.get(j) );
}
tmp.add(1);
triangle.add(tmp);
}
return triangle;
}
}