标题: 杨辉三角
杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要。
第0行: 1
第1行: 1 1
第2行: 1 2 1
第3行: 1 3 3 1
第4行: 1 4 6 4 1
....
两边的元素都是1, 中间的元素是左上角的元素与右上角的元素和。
我们约定,行号,列号都从0计数。
所以: 第6行的第2个元素是15,第3个元素是20
直观地看,需要开辟一个二维数组,其实一维数组也可以胜任。
如下程序就是用一维数组“腾挪”的解法。
public class A
{
// 杨辉三角形的第row行第col列
static long f(int row, int col){
if(row<2) return 1;
if(col==0) return 1;
if(col==row) return 1;
long[] a = new long[row+1];
a[0]=1;
a[1]=1;
int p = 2;
while(p<=row){
a[p] = 1;
for( __________________ ) a[q] = a[q] + a[q-1];
p++;
}
return a[col];
}
public static void main(String[] args){
System.out.println(f(6,2));
System.out.println(f(6,3));
}
}
请仔细分析源码,并完成划线部分缺少的代码。
注意:只提交缺少的代码,不要提交已有的代码和符号。也不要提交说明性文字。
解析:
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
* */
// 杨辉三角形的第row行第col列
static long f(int row, int col){
if(row<2) return 1; //第一行和第二行全部为1
if(col==0) return 1; //第一列全部为1
if(col==row) return 1; //每行最后一列全部为1
//以上3行代码符合的情况直接返回
long[] a = new long[row+1]; //定义数组存储当前行元素,元素个数=row+1
//初始化第二行的状态,第二行2个数字都是1
a[0]=1; //此处a[0]=1,不但初始化第二行状态,也为后面每个循环行的第一个元素赋值1
a[1]=1;
//p=2,使用p计数进行循环,意味着从第三行开始循环
int p = 2; //行数,在下面从第三行开始循环
//循环行,从第三行开始循环,分别用数组记录第三行结果,
//第四行结果由第三行结果得到
//第五行结果由第四行结果得到
//以此类推.......
while(p<=row)
{
a[p] = 1; //每行的最后一个元素=1
//当前行的数据=while上次循环行的同一列,和上一列的和
for(int q=p-1;q>=1;q-- ) a[q] = a[q] + a[q-1];
p++;
}
return a[col];
}
public static void main(String[] args){
System.out.println(f(6,2));
System.out.println(f(6,3));
}
网友评论