分为三种情况。
(1)numRows 为 0,return 【】;
(2)numRows <=2,都为1;
(3)numRows>2,除了第0位和第numRows-1位为1,其他第i位的值都为第numRows-1层第i位和第i+1的和。

非递归实现

public List<List<Integer>> generate(int numRows) {

		List<List<Integer>> list = new ArrayList<>(numRows);
		for (int i = 0; i < numRows; i++) {
			List<Integer> l1 = new ArrayList<>(i + 1);
			for (int j = 0; j < i + 1; j++) {
				if (j == 0 || j == i)
					l1.add(1);
				else
					l1.add(list.get(i - 1).get(j - 1) + list.get(i - 1).get(j));

			}
			list.add(l1);
		}
		return list;
	}

递归实现

public List<List<Integer>> generate_Recu(int numRows) {
		
		if(numRows==0)
			return new ArrayList<>();
		
		if(numRows==1) {
			List<List<Integer>> list = new ArrayList<>();
			List<Integer> l = new ArrayList<>(numRows);
			l.add(1);
			list.add(l);
			return list;
		}
		else {
			List<List<Integer>> list = generate_Recu(numRows-1);
			List<Integer> l = new ArrayList<>(numRows);
			for(int i=0;i<numRows;i++) {
				if(i==0 || i==numRows-1)
					l.add(1);
				else {
					l.add(list.get(numRows-2).get(i-1)+list.get(numRows-2).get(i));
				}	
			}
			list.add(l);
			return list;
		}


思路和上边的是一样的,在这里求第i层第j个元素时用了pre来存储上一层的第j-1个元素,temp存储上一层的第j个元素,然后再将temp的值赋值给pre,因为同一层第j-1个元素的temp就是第j个元素的pre。

public  List<Integer> getRow(int rowIndex){
		List<Integer> list = new ArrayList<>(rowIndex);
		list.add(1);
		if(rowIndex==0)
			return list;
		int pre = 1;
		for(int i=1;i<rowIndex+1;i++) {
			for(int j=1;j<i;j++) {
				int temp = list.get(j);
				list.set(j, pre+temp);
				pre = temp;
			}
			list.add(1);
		}
		return list;
	}