杨辉三角递推c语言,杨辉三角【递推】
先看一眼杨辉三角是啥
杨辉三角
题目1:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
class Solution {
//给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
public List> generate(int numRows) {
List> triangle = new ArrayList>();
for(int i=1; i<=numRows; i++){ //循环行数
List list_row = new ArrayList();
for(int j=1; j<=i; j++){ //每一行中循环列数(每一行的列数==行号)
if(j==1 || j==i){
list_row.add(1); //两侧补1
}else{
list_row.add(triangle.get(i-2).get(j-2) + triangle.get(i-2).get(j-1));
}
}
triangle.add(list_row);
}
return triangle;
}
}
题目2:
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
示例:
输入: 3
输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?
class Solution {
public List getRow(int rowIndex) {
List row_up_temp = new ArrayList();
for(int i=0; i<=rowIndex; i++){
List row_cur = new ArrayList();
for(int j=0; j<=i; j++){
if(j==0 || j==i){
row_cur.add(1);
}else{
row_cur.add(row_up_temp.get(j-1) + row_up_temp.get(j));
}
}
row_up_temp = row_cur;
}
return row_up_temp;
}
}
另一种解法,公式法
根据组合数的公式,将(n-k)!约掉,化简就是下边的结果。
Cnk=n! / (k!(n−k)!)=(n∗(n−1)∗(n−2)∗...(n−k+1))/k!
public List getRow(int rowIndex) {
List ans = new ArrayList<>();
int N = rowIndex;
for (int k = 0; k <= N; k++) {
ans.add(Combination(N, k));
}
return ans;
}
private int Combination(int N, int k) {
long res = 1;
for (int i = 1; i <= k; i++)
res = res * (N - k + i) / i;
return (int) res;
}
我们可以优化一下。
上边的算法对于每个组合数我们都重新求了一遍,但事实上前后的组合数其实是有联系的。
Cnk=Cnk-1×(n−k+1)/k
代码的话,我们只需要用pre变量保存上一次的组合数结果。计算过程中,可能越界,所以用到了long。
public List getRow(int rowIndex) {
List ans = new ArrayList<>();
int N = rowIndex;
long pre = 1;
ans.add(1);
for (int k = 1; k <= N; k++) {
long cur = pre * (N - k + 1) / k;
ans.add((int) cur);
pre = cur;
}
return ans;
}
杨辉三角递推c语言,杨辉三角【递推】相关推荐
- C语言八行杨辉三角空格数,C语言 杨辉三角
int i, j, k, n=0, a[20][20]; while(n<=0||n>=13){ //控制打印的行数不要太大,过大会造成显示不规范 printf("请输入要打印的 ...
- 杨辉三角靠左c语言,杨辉三角(空格对齐)
package homeWork; /* * 作业1.基础 打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 ...
- C语言经典递推算法之杨辉三角展开(详解)
文章目录 一.递推算法 二.杨辉三角展开 一.递推算法 这是一种比较简单的算法,即通过已知条件,利用特定关系得到中间结论,然后得到最后结果的算法.递推算法可以分为顺推和逆推两种. 二.杨辉三角展开 1 ...
- c语言如何输入大括号,杨宗德教你c语言使用大括号的正确方法
杨宗德教你c语言使用大括号的正确方法.在C语言中,使用大括号的方法无所谓对还是错--只要每个开括号后都有一个闭括号,你的程序中就不再会出现与大括号有关的问题.然而,有三种著名的大括号格式经常被使用: ...
- 课程设计排名C语言,C语言课程设计题目 ----研究生推免(保研)排名统计程序
C语言课程设计题目 ----研究生推免(保研)排名统计程序,一.C语言课程设计题目 ----研究生推免(保研)排名统计程序这C语言题目太BT了这种题自己做 ,mfc设定界面,用集合就可以了二.为什么我 ...
- C语言100行代码实现推箱子
1 C语言100行代码实现推箱子 1.1 概述 C语言是很好入门编程的一个语言,它拥有着很好的移植性,基本上所有的平台都支持C语言编程.有些C语言基础的你,是不是也很想做一个项目来检验一下自己的学习 ...
- 计算机可以保研什么专业吗,【计算机专业推免】推免生是什么?成为推免生要达到那些要求?...
3.招收推免直博生 直接攻读博士学位研究生须从已取得学术型推免生资格且获得所在高校推免生名额的优秀应届本科毕业生中遴选.,推免攻读直博生工作应与一般推免工作同步进行. 高校 招生学科 招生人数 201 ...
- iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解...
什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出 ...
- 58端口使用技巧跟推送_Kindle使用技巧:定时推送
今天,我要教大家使用泡面盖(kindle)的技巧. 首先,你的Kindle还好吗? 上次给大家推送了<RSS:让你的KINDLE不再吃灰>后,相信大家一定重新拿出了抽屉里的Kindle.不 ...
最新文章
- 服务器python密码_python实现批量修改服务器密码的方法
- Hyper-V Server 2008 R2 加入活动目录的方法
- [转载]根据两点的经纬度求方位角和距离,等
- i-i.me:网址导航真的是伪需求吗?
- alter system switch logfile和alter system archive log current的区别
- windows的bpython安装方法以及数据库报错--记录
- BZOJ1110 : [POI2007]砝码Odw
- tensorflow 的 Session Exception
- 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进阈值轴承故障仿真信号去噪【含Matlab源码 1024期】
- 模块二 会务现场服务策划方案 案例1样本
- 番茄时间--C#实现
- Modern Radar for Automotive Applications(用于汽车应用的现代雷达)
- ICP算法详解——我见过最清晰的解释
- html 字体炫彩特效,CSS3:TEXT-SHADOW|BOX-SHADOW(炫彩字体)
- 系统动力学软件vensim之指数增长
- php多商品规格统计数量
- 新网站收录情况的seo分析
- 薛蛮子和前8848总裁吕春维共同创立的车托帮
- 破解WiFi并且成功连接!原wifi主人想哭~
- IPv6转换难点分析之一:国家监测指标
热门文章
- hive 中的location
- ManageEngine ADManager Plus中文版
- python 的与众不同 -- 网络篇(二、网络请求/urllib)
- 矩阵与矩阵相乘python代码实现
- 十分钟了解“微服务”
- ios仿网易新闻客户端
- 使用HttpClient登录微博开放平台,获取授权code
- html5彩虹色填充,使用css技术的线性渐变来设计彩虹
- spring cloud stream kafka 动态写入不同的topic(Using dynamically bound destinations)
- ShardingJDBC分表说明