杨辉三角的算法实现
每日一道算法题,尝试不同的思路
package com.yjxxt.geng;
import java.util.Scanner;
/**
*
*
* 题目:打印出杨辉三角形(要求打印出10行如下图)
* 1.程序分析:
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
* 空格是m行-去当前行数
*/
public class Work01 {
public static void main(String[] args) {
//静态方法调用非静态先创建对象
Work01 ayyAdd = new Work01();
//键盘输入打印的行数
Scanner scan = new Scanner(System.in);
System.out.print("请输入需要打印的行数:");
//声明一个变量来接收
int num = scan.nextInt();
//知道打印的行数就是循环输出的次数用for
for (int i =1;i<=num;i++){
//每次循环就创建一个数组,然后正遍历打印输出
int[] arry = ayyAdd.yang(i);
//每行打印的空格数=m行-去当前行数
for (int k =0;k<num-i;k++){
System.out.print(" ");
}
//数组的正遍历
for (int j = 0;j<i;j++){
System.out.print(arry[j]+" ");
}
//每次循环后换行
System.out.println();
}
}
/**
* 先手写一个空构造器
* */
public Work01(){
}
/**
测试输出第n行的数组
*/
public int[] yang(int num){
//当num是第一行时
if (num == 1){
int[] arry = {1};
return arry;
}else{
//先生成上一行的数组
int[] arry = yang(num-1);
//生成一个对应长度的新数组 未赋值
int[] newArry = new int[num];
//从0~num-1 开始依次往新数组中赋值
for (int i = 0;i<num;i++){
//数组的头尾 一直都是1 先赋值
if (i==0 || i==num-1){
newArry[0] = 1;
newArry[num-1] = 1;
}else {
//新数组除了头尾外的 相同的索引 是上一行数组对应索引和它前一个索引的和
newArry[i] = arry[i-1]+arry[i];
}
}
return newArry;
}
}
}
结果打印