杨辉三角:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
————————–
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
满足:1.第一列和对角线都是1
2.后面行的某个数是前面一行对应前一列和当前列的数之和。
Java实现:
简单说明:处理的时候,最好是从第1行第1列开始,数组是从0开始的。为了好处理从第1行第1列。当然从第0行第0列也可以,不过比较麻烦。
下面代码:有控制台敲入一个数字,表示要输出杨辉三角的行数
package com.xaut.jianzhioffer;
import java.util.Scanner;
/*
* 实现杨辉三角
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* —————-
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
*
* */
public class Solution {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
int [][] tran = new int[level+1][level+1];
create(tran);
print(tran);
System.out.println(“——————–“);
print1(tran);
}
private static void print1(int[][] tran) {
// TODO Auto-generated method stub
int level = tran.length – 1;
for(int i = 1;i<tran.length;i++){//从第一层开始
for(int m = level -i;m>0;m–){
System.out.print(” “);
}
for(int j = 1;j<tran[i].length;j++){
if(tran[i][j]!=0){
System.out.print(” “+tran[i][j]);
}
}
System.out.println();
}
}
private static void print(int[][] tran) {
// TODO Auto-generated method stub
for(int i = 1;i<tran.length;i++){//从第一层开始
for(int j = 1;j<tran[i].length;j++){
if(tran[i][j]!=0){
System.out.print(” “+tran[i][j]);
}
}
System.out.println();
}
}
private static void create(int[][] tran) {
for(int i = 1;i<tran.length;i++){//从第一层开始
for(int j = 1;j<tran[i].length;j++){
if(j==1 || i==j){
tran[i][j] = 1;
}else{
tran[i][j] = tran[i-1][j-1] + tran[i-1][j];
}
}
}
}
}
结果:
5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
——————–
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1