上图就是一个杨辉三角,根据这个三角形我们可以找出以下几点规律
1.第一行固定就是一个1
2.第二行固定也是两个1
3.第i行的首尾元素都固定是1
4.第i行有i个元素
5.对于第i行来说,除了首尾,第j列的值等于i-1行j-1列的值+i-1行j列的值。
代码:
public class Mypork {
public static List<List<Integer>> func(int x){
List<List<Integer>> Result = new ArrayList<>();
List<Integer> First = new ArrayList<>();
First.add(1);
Result.add(First);
if(x==1){//当这个三角形只有一层的时候,此时直接返回现在的这个大顺序表
return Result;
}
List<Integer> Second = new ArrayList<>();
Second.add(1);
Second.add(1);
Result.add(Second);
if(x==2){
return Result;
}
for(int j = 3;j<=x;j++){//J代表第几行
List<Integer> ret = new ArrayList<>();
List<Integer> prev = Result.get(j-1-1);///需要知道前一行的信息,这里的j是第几行,对应在顺序表中知道前一行应该是j-1-1
ret.add(1);//在第一列添加一个1
for(int i = 2;i<j;i++){//i代表第几列
ret.add(prev.get(i-1-1)+prev.get(i-1));//这里的i同样是第几列,需要知道上一行的i-1列。
}
ret.add(1);//在最末尾再添加一个1
Result.add(ret);//然后把当前行添加到外层顺序表中
}
return Result;
}
public static void main(String[] args) {
System.out.println(func(5));
}
}
思路:首先创建一个顺序表,这个顺序表存放一行行元素组成的顺序表,当只有一层的时候,就直接往里层顺序表添加一个1,然后再把这个顺序表添加到外层顺序表中,当只有两层的时候,就往里层第二个顺序表里面添加两个1,然后再把这个顺序表添加到外层顺序表中。当层数大于2小于等于给定行数的时候,先获取到前一行的信息(*注:这里的行数不是下标,要知道前一行的信息需要把行数转为下标)*然后再在当前行的第一列添加一个1,第i列的值等于前一行中i-1列的值加上i列的值,然后再在末尾添加一个1.这样这一行就全部添加到顺序表中,然后再把这个顺序表添加到外层顺序表中,然后继续循环,知道最后一行添加完。