Pascal's Triangle II

来源:互联网 发布:讯龙恢复软件注册码 编辑:程序博客网 时间:2024/06/04 18:20

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?

思路还是Pascal's Triangle的思路,只不过这里有了O(k)的限制,既然限制了空间的使用,那么我们就要考虑怎么减少空间的损耗Pascal's Triangle里面我们求出了每一层的list,如今我们只需要求最后一层,那么久可以给最后一层定义一个list,其余各层都使用这一个list进行存储,这样存储空间就不会超过O(K)了。观察发现下一层等于在上一层的每两个数之间插入它们的和

[1,2,1]变成了[1,3,2,3,1],之后我们再将从倒数第三个数开始(从倒数开始,是因为这样方便,比如只需要将i - 2,就能找到下一个待删除的元素,如果说从头开始,那么下一个待删除元素将不好找,故我使用了倒数的方式),每隔一个数删除一个,即[1,3,3,1];


public class Solution {    public List<Integer> getRow(int rowIndex) {            <span style="white-space:pre"></span>List<Integer> list = new LinkedList<Integer>();       int low = 0;        int high = 0;        int level = 0;        list.add(1);        if(rowIndex >= 1 ){            list.add(1);        }        level = 1;        while(level <  rowIndex){        high = list.size() - 1;            <span style="white-space:pre"></span>for(int i = 0,j = 1; j <= high;i = i + 2,j = j + 2){                <span style="white-space:pre"></span>list.add( i + 1, list.get(i)+list.get(j));            <span style="white-space:pre"></span>high ++;            <span style="white-space:pre"></span>}        for(int i = high - 2; i > 0; i --,i--){        list.remove(i);        }               <span style="white-space:pre"></span>level++;        }            <span style="white-space:pre"></span>return list;    }}

Runtime: 208 ms

0 0
原创粉丝点击