118. Pascal's Triangle
来源:互联网 发布:最权威的行业数据 编辑:程序博客网 时间:2024/06/16 08:16
题目
Given numRows, generate the first numRows of Pascal’s triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
代码
import java.util.ArrayList;import java.util.List;public class Solution { public static List<List<Integer>> generate(int numRows) { List<List<Integer>> list = new ArrayList<>(); for(int i=1;i<=numRows;i++){ List<Integer> l = new ArrayList<>(); int v = 0; for(int j=0;j<i;j++){ if(j==0 || j==i-1){ v=1; } else v=(i-j)*v/j; l.add(v); } list.add(l); } return list; }}
思路分析
其实这道题是先看懂了下一题119才写的,所以没有用传统的办法,直接上公式了。
杨辉三角中,其实可以很容易发现每一行的系数就是排列组合
比方说,第五行(numRows = 5时),C(4,0),C(4,1),C(4,2),C(4,3),C(4,4)就是对应的5个数
这里就用到了一个公式,设置一个V(value),并且不断更新它
比方说,
C(4,0)=1;
C(4,1)=4/1;
C(4,2)=(4*3)/(2*1)
C(4,3)=(4*3*2)/(3*2*1)
C(4,4)=1
(我不会写排列组合的MarkDown表现形式…在我学会之前都意会一下吧…看不懂我也木有办法了…..)
可以看出两点:
- 第一项和最后一项就不用算了,肯定是1
中间的每一项,上面每次乘以小一的数,下面每次除以大一的数
所以现在就应该想怎么完成这个公式
设它的结构是C(numRows-1,i) ( i 即0,1 ,2, 3,4)
那么其实
C(numRows-1,i)=C(numRows-1,i-1)*(numRows-i)/ i
这就很好写了0.0
就是每一轮,旧的V被新的V更新~
v=v*(numRows - i) / i
嗯然后剩下的大循环应该就没什么难度了~值得注意的就是List的add,这是第一次写两层的,还是值得纪念一下的…
就这两个难点了,总结完毕~~有了这个铺垫下一道题简直就容易到飞起了
(这件事说明了一个道理:工具的重要性,如果一直用原理,其实是很费时间和精力的,但是换一个方法,就能大大降低工作量,让代码简洁易懂,也不容易出现纰漏,并且很通用呀..做了一道题相当于两道题..╮(╯▽╰)╭)
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118.Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- UiAutomator 1.0自动化测试
- 用retrofit上传图片与下载以及进度
- yum和apt-get的区别和用法
- HDU----Big Number
- The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received
- 118. Pascal's Triangle
- Python中类和对象变量
- css3安卓机器人旋转
- rabbitMQ在linux上安装教程和问题解决
- Vuex的基本使用
- Android入门知识,新建一个Android项目
- 对象属性加引号与不加引号de区别
- 【DP】TEST20170406
- OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)