leetcode:118. 杨辉三角

2023-09-19 08:36:35

一、题目

函数原型:int** generate(int numRows, int* returnSize, int** returnColumnSizes)

参数解析:numRows是指明要求前几行杨辉三角

                  returnSize是返回指针数组的元素个数

                  returnColumnSizes是指明杨辉三角每一行有几个元素

二、思路

        既然需要函数返回值类型是int**,那么需要返回一个指针数组。先创建一个指针数组ret,并为其申请空间。returnSize是指针数组元素个数,那么也就等于numRows。每一个指针数组中的一个元素又是一个数组,returnColumnSizes就表示该数组的大小。

        经过观察杨辉三角,发现每一行除去第一个和最后一个元素,其余元素值都等于上一行邻近的两个数之和。因此设置头指针与尾指针,头指针初始指向每一行第二个元素,尾指针初始指向每一行倒数第二个元素。设置循环,新的一行值用上一行的相邻两个元素相加得到,每一行首尾元素值为1,无需计算。

        当杨辉三角行数小于等于3时,每一行的值都可以直接赋值,无需计算。当行数大于等于4时,需要利用循环和首位指针得到每一行的元素值。最后返回指针数组ret。

int** generate(int numRows, int* returnSize, int** returnColumnSizes) 
{
	*returnSize = numRows;//返回数组个数等于numRows
	int** ret = (int**)malloc(sizeof(int*) * numRows);//返回的数组指针
	*returnColumnSizes = malloc(sizeof(int)* numRows);

	int left = 0;//头指针
	int right = 0;//尾指针

	int i = 0;
	//int j = 0;
	for (i = 0; i < numRows; i++)
	{
		(*returnColumnSizes)[i] = i + 1;
		ret[i] = (int*)malloc(sizeof(int) * (i + 1));
		if (i == 0 )
		{
			ret[i][0] = 1;
		}
		if (i == 1)
		{
			ret[i][0] = 1;
			ret[i][1] = 1;
		}
		if (i == 2)
		{
			ret[i][0] = 1;
			ret[i][1] = 2;
			ret[i][2] = 1;
			left = 1;
			right = i - 1;
		}
		if (i >= 3)
		{
			ret[i][0] = 1;
			ret[i][i] = 1;
			left = 1;
			right = i - 1;
			while (left <= right)
			{
				ret[i][left] = ret[i - 1][left] + ret[i - 1][left - 1];
				ret[i][right] = ret[i - 1][right] + ret[i - 1][right - 1];
				left++;
				right--;
			}
			left = 1;
			right = i - 1;
		}
	}
	return ret;
}

更多推荐

go迷之切片截取分析

切片截取,有没有很迷?目录典型截取(两参数、三参数)及分析迷之append参与截取及细节分析关于截取时的初始索引是否从第一个位置开始的影响修改原切片细节分析典型截取(两参数、三参数)及分析先看一个例子来表示一下切片截取(仅截取,无append):a:=[]int{1,2}a0:=a[0:1]fmt.Printf("a0

UI设计和平面设计的区别是什么?看完这篇一次搞懂

很多想要从事视觉领域工作的新手设计师,搞不懂UI设计和平面设计的区别;也有很多平面设计师工作后想转UI,却不知道该如何进行,导致择业和职业发展受阻,其实核心问题还是因为没有弄清楚UI设计和平面设计的区别是什么。这里先说明,UI设计和平面设计,是两个完全不同的设计领域。UI设计师着重于解决产品的用户习惯和易用体验,而平面

07JVM_内存模型和CAS与原子类

一、内存模型1.java内存模型Java内存结构是JMM(JavaMemoryModel)的意思。JMM定义了一套在多线程读写共享数据(成员变量,数组)时,对数据的原子性,见性,有序性的规则和保障。1.1原子性什么是原子性?原子性是指一个操作是不可中断的,即使多个线程一起执行,一个线程一旦开始,就不会被其他线程干扰。如

Django系列:Django开发环境配置与第一个Django项目

Django系列Django开发环境配置与第一个Django项目作者:李俊才(jcLee95):https://blog.csdn.net/qq_28550263邮箱:291148484@163.com本文地址:https://blog.csdn.net/qq_28550263/article/details/1328

自动化测试—选择器

根据id选择名字:<inputtype="text"id='searchtext'/>element=wd.find_element(By.CSS_SELECTOR,'#searchtext')element.send_keys('你好')根据class选择元素的两种方式:1.By.CLASS_NAME:element

form组件的封装(element ui ) 简单版本

当你使用Vue.js构建Web应用时,封装可复用组件是提高开发效率和代码可维护性的关键之一。在这篇文章中,我们将探讨如何使用Vue.js来创建一个通用的表单组件,以及如何将它封装成一个可配置的组件。实现思路拿下表单模板一个个的改造(文本,下拉,单选,复选等)按钮默认值的设定rules规则的处理创建通用的form组件这段

Arm机密计算架构技术(Armv9 CCA) 白皮书

1.概述在本篇文章中,我们将介绍机密计算(ConfidentialComputing)在现代计算平台中扮演的角色,并解释机密计算的原理。然后我们将说明Arm机密计算架构(ArmCCA)如何在Arm计算平台中实现机密计算。看完本文后,您将能够:定义机密计算描述复杂的系统信任链了解Realm(机密领域)是由ArmCCA引入

网络安全进阶学习第十八课——业务逻辑漏洞(附录:不同行业业务逻辑的漏洞)

文章目录一、互联网行业二、P2P金融行业三、电商行业四、政务行业总结一、互联网行业通用业务模块业务逻辑漏洞登录暴力破解用户名密码撞库验证码爆破和绕过、手机号撞库、账户权限绕过注册恶意用户批量注册、恶意验证注册账户、存储型XSS密码找回重置任意用户账户密码、批量重置用户密码、新密码劫持、短信验证码劫持、用户邮箱劫持篡改后

leetcode 1921. 消灭怪物的最大数量(每日一题)

最近学习的状态找回很多。慢慢来吧,加油!1921.消灭怪物的最大数量你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个下标从0开始且长度为n的整数数组dist,其中dist[i]是第i个怪物与城市的初始距离(单位:米)。怪物以恒定的速度走向城市。给你一个长度为n的整数数组speed表示每个怪物的速度,其

2023年中国研究生数学建模竞赛D题解题思路

为了更好的帮助大家第一天选题,这里首先为大家带来D题解题思路,分析对应赛题之后做题阶段可能会遇到的各种难点。稍后会带来D题的详细解析思路,以及相关的其他版本解题思路成品论文等资料。赛题难度评估:A、B>C>E、F>D选题人数评估:D>E、F>C>A、BD题区域双碳目标与路径规划研究以当下热门话题双碳碳中和为命题背景设置

孙哥Spring源码第24集

第24集处理AOP【视频来源于:B站up主孙帅sunsSpring源码视频】【微信号:suns45】1、谈一下你对ApplicationContext的理解BeanFactoryPostProcessorsBeanPostProcessor1.BDBeanFactoryPostProcessors、BeanPostPr

热文推荐