PascalTriangel II

来源:互联网 发布:短信验证码 java 编辑:程序博客网 时间:2024/05/18 07:58

问题描述:输出帕斯卡三角形的指定行。


解决:

这一题与上一题类似,上一题需要输出整个三角形,这里只需要输出指定的一行k。要求空间复杂度为o(k),上一题求出cur行是通过计算pre的元素得到的,

这题因为空间复杂度的要求,只能用cur这一个引用。如果仍然像上一题的做法来做,会出现元素覆盖问题。举例,给[1, 2, 1],算下一行,那么依次该行的变化

过程是[1, 3, 1]->[1, 3, 4]—>[1, 3, 4, 1],显然不对的。这是因为当cur[i]不为首尾元素时,cur[i] = cur[i-1] + cur[i],cur[i+1] = cur[i] + cur[i+1]

此时cur[i]已经是新的值了,cur[i+1]计算出来不正确。但是如果我们从后往前算,cur[i] = cur[i-1] + cur[i],cur[i-1] = cur[i-2] + cur[i-1]。

新计算出的元素cur[i],在计算cur[i-1]时并没有起到作用。保证了每一个元素计算出来都是正确的。

/* * Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. */import java.util.ArrayList;import java.util.List; public class PascalTriangelII {    public List<Integer> getRow(int rowIndex) {        List<Integer> res = new ArrayList<Integer>();        if(rowIndex < 0)                 return res;        res.add(1);        for(int i=1; i<=rowIndex; i++) { //要求出第rowIndex行,需进行rowIndex次操作                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;    }}


原创粉丝点击