博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pascal's Triangle I&II
阅读量:6324 次
发布时间:2019-06-22

本文共 1789 字,大约阅读时间需要 5 分钟。

118 Pascal's Triangle

思路

把三角分为三种情况, 第一个1是每一行都有的, 结尾的1是从第二行才开始有, 然后中间的数字是从第三行开始, 对于i位置的数字是他前一行的i位置和i-1位置数字的和

复杂度

时间O(n^2) 空间O(n^2)

代码

public class Solution {    public List
> generate(int numRows) { List
> res = new ArrayList<>(); if (numRows<=0) {return res;} for (int i = 0; i
tmp = new ArrayList<>(); tmp.add(1); //每一行的第一个数字 for (int j = 1; j< i; j++) {//从第三行开始加入中间的数字 tmp.add(res.get(i-1).get(j) + res.get(i-1).get(j-1)); } if (i > 0) {//每行最后一个数字 tmp.add(1); } res.add(tmp); } return res; }}

119. Pascal's Triangle II

思路 (迭代相加法)

与1相同, 用另外一个数组来记录上此次遍历的结果

复杂度

时间O(n^2) 空间O(k)

代码

class Solution {    public List
getRow(int rowIndex) { List
res = new ArrayList<>(); if (rowIndex<0) {return res;} for (int i = 0; i <=rowIndex; i++) { List
list = new ArrayList<>(); list.add(1); //每一行的第一个数字 for (int j = 1; j< i; j++) {//从第三行开始加入中间的数字 list.add(res.get(j) + res.get(j-1)); } if (i > 0) {//每行最后一个数字 list.add(1); } res = list; } return res; }}

思路(逆序相加法)

与迭代法相同, 但是我们在同一个list上面操作, 每次从后往前更改list上面的数字. 这样可以节省空间因为只用到一个list

复杂度

时间O(n^2) 空间O(k)

代码

class Solution {    public List
getRow(int rowIndex) { List
res = new ArrayList<>(); if (rowIndex<0) {return res;} res.add(1); for (int i = 0; i
0; j--) { res.set(j, res.get(j) + res.get(j-1)); } res.add(1); } return res; }}

转载地址:http://evmaa.baihongyu.com/

你可能感兴趣的文章
什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
查看>>
Atlas Control ToolKit 发布
查看>>
世界是数字的
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
GC是什么? 为什么要有GC?
查看>>
JQuery EasyUi之界面设计——母版页以及Ajax的通用处理(三)
查看>>
童年记忆
查看>>
Selenium Python bindings 文档一
查看>>
directX的16位和24位的色彩模式
查看>>
WINDOWS 8
查看>>
ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[下篇]
查看>>
spring(10)
查看>>
Ubuntu 12.04 LTS 及ubuntu14.10 -- NFS安装
查看>>
hdu 5063 Operation the Sequence(Bestcoder Round #13)
查看>>
django orm多条件查询及except处理不存在记录的样码
查看>>
8.3折抢购最欢迎的Mac清理工具CleanMyMac3
查看>>
第十五章 springboot + pojo默认值设置
查看>>
linux grep命令
查看>>