杨辉三角 -(列数不等二维数组)

做法1

目的 :打印一个杨辉三角 ?ω?

型如:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...

为了更好的发现规律,稍微给这个原始的杨辉三角做点 处理 : ●ω●

  a b c d e f   
a 1 0
b 1 1 0
c 1 2 1 0
d 1 3 3 1 0
e 1 4 6 4 1 0
...

当你把每一行的首尾都 定死为1和0 ,那么会得到一点 规律 :<( ̄︶ ̄)>

变化的部分永远都是中间的那个三角区域

"效果分析"

也就是说,大概可以得出这样的一个等式 (在第1列和第一行定死数字且每行最后一个数字定死为0的情况下)

假设当前的位置为 (x,y) ,值为 nn=(x-1,y-1)+(x-1,y) ;

(x-1,y-1)和(x-1,y) 都表示一个 二维坐标

核心都明白了,接下来直接上代码了. ~( ̄▽ ̄)~*

import java.util.Scanner;
public class YanHui {
public static void main(String[] args) {
// 杨辉三角
/*
先确定杨辉三角的高度

再观察规律
第1行 1 0
第2行 1 1 0
第3行 1 2 1 0
第4行 1 3 3 1 0
观察得出:
1.每一个数字对应它正上方的数字与左上方数字的加和
2.每一行的1和0是固定的
3.每一行的加和对象都是[1,arr.length-2]
=>也就是说,每一行需要进行运算的对象是[1,arr.length-2]

实现:
初始化的数组:
int[][] arr = new int[4][];
最初的赋值:
int arr[0] = {1,0}
行数为i列数为j的话,
i,j的初始值都是1,j的结束值是0
而且,j的大小=前层的大小+1
*/
// 具体实现:
// 获取杨辉三角的高度(灵活的控制杨辉三角的高度)
Scanner myScanner = new Scanner(System.in);
// System.out.print("请输入杨辉三角的高度:");
// int height = myScanner.nextInt();
int height = 6;
// 控制杨辉三角的行宽度
int width = 2;
// 定义初始数组
int[][] arr = new int[height][];


arr[0] = new int[width];
arr[0][0] = 1;
// 这里有个坑,数字0是没有占用长度的……
// 也就是说,用0计算长度会直接忽略掉0
// 比如{1,0,0}.length=1;
for (int i = 1;i <height;i++ ) {
width++;
arr[i] = new int[width];
arr[i][0] = 1;
for (int j=1; j<width-1;j++ ) {
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
System.out.println("高度为"+height+"的杨辉三角:");
for (int i=0;i<arr.length ;i++ ) {
for (int j=0;j<arr[i].length-1 ;j++ ) {
System.out.print(arr[i][j]+"\t");
}
System.out.println("");
}
}
}

最终会实现如下的效果: ̄▽ ̄

"最终展示"

其实做法有很多种,比如:

做法2

1.第一行1个元素,第n行n个元素
2.每行首末都是1
3.第三行开始,除去第一个元素与最后一个元素外,
arr[i][j]=arr[i-1][j]+arr[i-1][j-1]

这种做法比先前的思路简便些,感觉代码实现也略微简单些。

public class YanHui03 {
public static void main(String[] args) {
// 采用另外一种思路的杨辉三角
// 获取高度
int height = 6;
// 获取宽度
int width = 0;
// 创建具有初始行数的数组
int[][] yanghui = new int[height][];
// 操作每行
for (int i = 0;i < yanghui.length ;i++ ) {
// 操作每行行内元素
// 按每行创建,大小为i+1
yanghui[i] = new int[i+1];
// 行的宽度定义为i+1
width = i+1;
// 内层的循环
for (int j = 0;j < width ;j++ ) {
// 如果行数不是第0行
if (j==0||j==width-1) {
// 首末都是1,类似于那种空心棱形的编程思想
yanghui[i][j] = 1;
} else {
yanghui[i][j] = yanghui[i-1][j]+yanghui[i-1][j-1];
}
}
}

System.out.println("打印高度为"+height+"的杨辉三角所有的元素:");
for (int i=0;i<yanghui.length ;i++ ) {
for (int j=0;j<yanghui[i].length ;j++ ) {
System.out.print(yanghui[i][j]+" ");
}
System.out.println("");
}
}
}

效果图和之前那个差不多啦ヽ(ˋ▽ˊ)ノ
"最终展示"