leetcode: Pascal's Triangle II | Java 最短代码实现

原题链接: Pascal's Triangle II

【思路】

与 leetcode: Pascal's Triangle | Java最短代码实现 不同的是,本题只需要返回一行,并且要求空间复杂度为超过 O(k),我们将每一行的结果存放在 result 结果集中,一行一行地更新:

    public List<Integer> getRow(int rowIndex) {
        List<Integer> result = new ArrayList<Integer>();
        result.add(1);
        for (int i = 0; i < rowIndex; i++) {  //进行 rowIndex - 1 次(hang)更新
            for (int j = i; j > 0; j--)  //利用本行的结果,更新下一行的结果
                result.set(j, result.get(j) + result.get(j - 1));  //下一行的第 j 个元素为上一行的第 j - 1 和第 j 个元素的和
            result.add(1);
        }
        return result;
    }
34 / 34  test cases passed. Runtime: 3 ms  Your runtime beats 21.02% of javasubmissions.

【优化】

我们也可以直接根据 rowIndex 推出那一行的结果,而不需要根据前一行进行推导:

    public List<Integer> getRow(int rowIndex) {
        List<Integer> ans = new ArrayList();
        ans.add(1);
        for(int i = 1; i <= rowIndex; i++)
            ans.add((int)(Math.round(ans.get(i - 1) * ((double)(rowIndex - i + 1) / i))));
        return ans;
    }
34 / 34  test cases passed. Runtime: 1 ms  Your runtime beats 84.70% of javasubmissions.

你可能感兴趣的:(leetcode: Pascal's Triangle II | Java 最短代码实现)