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的思路,只不过这里有了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

你可能感兴趣的:(LeetCode)