学习指引
- 序、专栏前言
- 1、什么是杨辉三角?
- 一、【例题1】
- 1、题目描述
- 2、解题思路
- 3、模板代码
- 三、推荐专栏
- 四、课后习题
序、专栏前言
本专栏开启,目的在于帮助大家更好的掌握学习Java
,特别是一些Java学习者
难以在网上找到系统地算法学习资料帮助自身入门算法
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
1、什么是杨辉三角?
说到杨辉三角,肯定要了解杨辉这个人物。他是南宋著名的数学家,而杨辉三角则是他发扬光大的。杨辉三角,是二项式系数在三角形中的一种几何排列。杨辉三角的性质非常非常重要。不过最重要的是两条性质
- 第
行的首项和末项一定为
。
- 第
行的第
列对应的为,上面两个元素的和,公式为:
一、【例题1】
1、题目描述
,请你打印出
层杨辉三角
。
2、解题思路
,这非常容易爆空间。由于每一层的值只与上一层有关,我们可以考虑使用滚动数组进行优化,两个数组交替使用,空间复杂度为
。另外一个需要注意的是,由于累加的和增加的非常快,所以在到达一定层数后,值可能会爆
int
,所以我们需要使用long
类型。
3、模板代码
import java.util.Scanner;
public class Main {
static int N=1010;
static long[] a=new long[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
a[1]=1;
System.out.println(a[1]);
for (int i = 2; i <=n; i++) {
long[] b=new long[n+1];
for (int j = 1; j <=i; j++) {
b[j]=a[j-1]+a[j];
System.out.print(b[j]+" ");
}
System.out.println();
a=b;
}
}
}
不大的情况下,我们也可以使用二维数组存储,使用公式去计算杨辉三角。
import java.util.Scanner;
public class 杨辉三角形公式 {
public static void main(String[] args) {
//这种方法可以缩短时间复杂度,而且简单,重点掌握
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] nums = new int[n][n];
for(int i=0;i<n;i++){
long a = (long) 1;
for(int j=0;j<=i;j++){
System.out.print(a+" ");
// a = a*(i-j)/(j+1)是重点
//数据过大可能溢出,用long型
a =a * (i-j)/(j+1);
}
System.out.println();
}
}
}
课后习题
序号 | 题目链接 | 难度评级 |
1 | 杨辉三角 | 2 |