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

【LeetCode】Pascal’s Triangle II 解题报告

[LeetCode]

[https://leetcode.com/problems/pascals-triangle-ii/][1]

Total Accepted: 74643 Total Submissions: 230671 Difficulty: Easy

Question

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?

Ways

这个题最简单的方法当然是根据杨辉三角1中的方法返回最后一列数据。但是这样肯定不符合要求。

比较好的方法我也想出来了,但是直接写出来的能力还是达不到。我想这个是因为在电脑上白板写代码的时候没办法用笔去勾勒。这个以后改进。挺简单的题又折腾了一个小时……

我的想法和大多数人是一样的,类似于动态规划的问题,就是重复利用空间,把上一轮的数据给覆盖掉即可。

我想我做不出来的原因在于不知道一个技巧,就是可以从后往前遍历,好处是不会把概要的数据给覆盖掉。举例说明:

i   answer
0   1
1   1   1
2   1   2   1
3   1   3   3   1
4   1   4   6   4   1
......

看的时候是对每一个i行,从这个行上一行的最右边的那位开始,这一项等于这项和前一项的和。再看这一项的前一项。最后遍历完成之后添加最后一位设置为1;

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

AC:3ms

这个题的从优向左遍历的方法在动态规划中也会用到。

Date

2016 年 05月 8日

你可能感兴趣的:(LeetCode)