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,3,1].

Note:

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

這道題跟Pascal's Triangle很類似,只是這裏只需要求出某一行的結果。Pascal's Triangle是求出全部結果,所以我們需要上一行的數據就很自然的可以去取。而這裏我們只需要一行數據,就得考慮一下是不是能只用一行的空間來存儲結果而不需要額外的來存儲上一行呢?這裏確實是可以實現的。對於每一行我們知道如果從前往後掃,第i個元素的值等於上一行的res[i]+res[i+1],可以看到數據是往前看的,如果我們只用一行空間,那麼需要的數據就會被覆蓋掉。所以這裏採取的方法是從後往前掃,這樣每次需要的數據就是res[i]+res[i-1],我們需要的數據不會被覆蓋,因爲需要的res[i]只在當前步用,下一步就不需要了。這個技巧在動態規劃省空間時也經常使用,主要就是看我們需要的數據是原來的數據還是新的數據來決定我們遍歷的方向。時間複雜度還是O(n^2),而空間這裏是O(k)來存儲結果,仍然不需要額外空間。

public class Solution {
    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++){
            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;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章