118、给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
1、首先解释List<Integer>
泛型,指定传入的类型,这样定义之后,这个list只能接收Integer的对象,提高效率;
例如List<List<Integer>>返回[ [1] , [1,1] , [1,2,1] ]
2、初始化List<List<Integer>>的两种方法
//方法一
List<List<Integer>> triangle=new ArrayList<>();
//方法二
List<List<Integer>> triangle=new ArrayList<List<Integer>>();
3、代码
import java.util.List;
import java.util.ArrayList;
class Solution {
public static List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle=new ArrayList<List<Integer>>();
//当行数等于0时,返回空数组
if(numRows==0)
return triangle;
//当行数不等于0时
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;
}
}
119、给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3 输出: [1,3,3,1]
方法一、在上面代码基础上改动,先将杨辉三角每一行都求出,然后想要哪行就取哪行
import java.util.List;
import java.util.ArrayList;
class Solution {
public static List<Integer> getRow(int rowIndex) {
List<List<Integer>> triangle=new ArrayList<List<Integer>>();
List<Integer> tmp1=new ArrayList<Integer>();
tmp1.add(1);
triangle.add(tmp1);
for(int i=1;i<=rowIndex;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)+last.get(j-1));
tmp.add(1);
triangle.add(tmp);
}
//返回杨辉三角第rowIndex+1行,当rowIndex=0时,返回[1]
return triangle.get(rowIndex);
}
方法二、 不需要将杨辉三角每一行都写出,需要哪一行求哪一行就行
import java.util.List;
import java.util.ArrayList;
class Solution {
public static List<Integer> getRow(int rowIndex) {
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<=rowIndex;i++){
list.add(1);
for(int j=i-1;j>=1;j--)
list.set(j, list.get(j)+list.get(j-1) );
}
return list;
}
}