Given an index k, return the kth row of the Pascal's triangle.

For example, given k = 3,
Return [1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?

这道题倒是不难,有个有意思的地方是可以优化到O(k)的空间复杂度。下面先上O(k^2)的算法。

    @Test
public List<Integer> getRow(int rowIndex) {
int[][] f = new int[rowIndex + 1][rowIndex + 1];
List<Integer> res = new ArrayList<>();
for (int i = 0; i <= rowIndex; i++) {
res.add(getNum(rowIndex, i, f));
}
return res;
} public int getNum(int row, int col, int[][] f) {
if (row == 0 || row == 1 || col == 0 || col == row)
return 1;
if (col < 0)
return 0;
if (f[row][col] == 0)
f[row][col] = getNum(row - 1, col, f) + getNum(row - 1, col - 1, f);
return f[row][col];
}

上面算法还算比较直观,就是依次取出第rowIndex行的各个元素,加入到list中。通过代码可以发现,第K行的数据仅仅依赖于第K-1行,也就是说,我们可以进行降维,将二维数组降为一维,这里注意,降维之后,用一维数组来记录当前行的数据,计算的时候应从后往前计算,还是以二维进行假设,当前元素为

  F[k][col]=F[k-1][col]+F[k-1][col-1]

那么,当循环走完k-1遍时,一维数组里的数据F[col]里存的是对应二维数组的F[k-1][col],从后往前计算,F[col]=F[col]+F[col-1],那么走完这一遍,F数组里存的是F[k][0...col]的数据,如果从前往后计算,F[col]=F[col]+F[col-1],仔细看,F[col+1]=F[col+1]+F[col],这里就有问题了,F[col]这里已经不是k-1状态的数据了,所以这样计算有问题。这个降维的技巧在动态规划里也经常用,注意要从后往前计算。

Talk is cheap。

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

Pascal's Triangle II —LeetCode的更多相关文章

  1. Pascal's Triangle II leetcode

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  2. Pascal's Triangle II Leetcode java

    题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return ...

  3. 学会从后往前遍历,例 [LeetCode] Pascal's Triangle II,剑指Offer 题4

    当我们需要改变数组的值时,如果从前往后遍历,有时会带来很多麻烦,比如需要插入值,导致数组平移,或者新的值覆盖了旧有的值,但旧有的值依然需要被使用.这种情况下,有时仅仅改变一下数组的遍历方向,就会避免这 ...

  4. leetcode 118. Pascal's Triangle 、119. Pascal's Triangle II 、120. Triangle

    118. Pascal's Triangle 第一种解法:比较麻烦 https://leetcode.com/problems/pascals-triangle/discuss/166279/cpp- ...

  5. 【LeetCode】Pascal's Triangle II 解题报告

    [LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...

  6. 【LeetCode】118 & 119 - Pascal's Triangle & Pascal's Triangle II

    118 - Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, ...

  7. LeetCode OJ 119. Pascal's Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  8. LeetCode: Pascal's Triangle II 解题报告

    Pascal's Triangle II Total Accepted: 19384 Total Submissions: 63446 My Submissions Question Solution ...

  9. LeetCode Pascal's Triangle && Pascal's Triangle II Python

    Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given ...

随机推荐

  1. android中Canvas使用drawBitmap绘制图片

    1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置     drawBitmap(Bitmap bitmap, float left, float ...

  2. winserver2008下创建计划任务注意点

    winserver2008下创建任务计划注意点: 1.建立独立用户,可以给其赋予administrator权限 2.起始于(可选):要填写exe文件所在路径 3.设置成“不管用户是否登录都运行”,同时 ...

  3. C++初始化顺序

    1. 全局和类的静态变量成员在main之前构造和初始化,静态成员不能在类的内部构造初始化 2. 类的普通成员依据在类内的定义顺序初始化,类的构造函数的初始化类表只能决定成员的构造函数,不能决定构造顺序 ...

  4. (转)H264(NAL简介与I帧判断)

    1.NAL全称Network Abstract Layer, 即网络抽象层.         在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(N ...

  5. 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移

    在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...

  6. php 在web端读出pdf 与各种文件下载

    单纯的下载功能实现 <?php // 表示调用文本类型为pdf的应用 header('Content-type: application/pdf'); // 这句可以输出下载页面进行下载 hea ...

  7. webconfig的设置节点几个说明

    有助于深入理解webconfig <?xml version="1.0" encoding="utf-8" ?> <configuration ...

  8. Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)

    linux作为服务器系统,当运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到3800左 ...

  9. jquery动画总结

    基本动画 show() //直接显示元素,没有动画 show(speed, [callback]) //有动画,有回调函数 hide() //直接隐藏元素,没有动画 hide(speed, [call ...

  10. javascript入门学习笔记

    <button type="button" onclick="alert('Welcome!')">点击这里</button>alert ...