【杨辉三角】+ OJ题

目录

一.什么是杨辉三角?

二.实现方法

1.直角三角形版

2.等腰三角形版


一.什么是杨辉三角?

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

形如:

我们不难看出其存在明显的规律。

即:图片的两个斜边都是数字1其余的数都等于它所在层的肩上(即上一层)的两个数字之和。

二.实现方法

1.直角三角形版

如图:

我们先来实现上面这种简单的杨辉三角版本,由于这种规律是一层一层的,输出每一层时都要以上一层为基础。为此我们可以设置一个二维数组来存储这些数字,以每一层为数列的一行。听不懂的建议直接看下面的图示,更直观。

 上面这样的好处是让我们的代码写起来简洁,有规律,不繁琐。每次除输入每行的第一个和最后一个固定不变的1外,其余均可用 a[i][j] = a[i - 1][j - 1] + a[i - 1][j] 进行输入输出。

#include<stdio.h>
#define M 9
int main() {

	int a[M][M] = { 0 };

	for (int i = 0; i < M; i++) {
		
		for (int j = 0; j<=i; j++) {
			if (j == 0 || j == i) {
				a[i][j] = 1;
				printf("%d ", a[i][j]);
			}
			else {
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				printf("%d ",a[i][j]);
			}
		}
		printf("\n");
	}
	return 0;
}

结果:

2.等腰三角形版

等腰三角形版这种图形就是真正的杨辉三角了,因此我们要考虑每一行的空格字符的输出了,

不难看出每一行的空格字符输出也是有规律的。

#define M 13  //意为打印M行杨辉三角
int main() {

	int a[M][M] = { 0 };
	int tmp = M;
	for (int i = 0; i < M; i++) {
		
		for (int j = 0; j < tmp - 1;j++) {	
			printf("   "); //三个空格,格式好看
		}
		tmp--;

		for (int j = 0; j<=i; j++) {
			if (j == 0 || j == i) {
				a[i][j] = 1;
				printf("%3d   ", a[i][j]); //%3d占三个字符,再加三个空格,格式好看
			}
			else {
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				printf("%3d   ",a[i][j]);   //%3d占三个字符,再加三个空格,格式好看
			}
		}
		printf("\n");
	}
	return 0;
}

 结果:

3.杨辉三角OJ题

 借助  list.get(index) 函数完成

import java.util.*;
class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();

        for(int i=0;i<numRows;i++) {

            List<Integer> list = new ArrayList<>();

            for(int j=0;j<=i;j++) {
                if(j==0 || i==j){  //两边都赋值为1
                    list.add(1);
                }else{
                    int tmp = ret.get(i-1).get(j-1) + ret.get(i-1).get(j);%中间进行运算
                    list.add(tmp);
                }
                
            }

            ret.add(list);

        }

        return ret;
        
    }
}

  • 39
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去北极避暑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值