【LeetCode】119. Pascal's Triangle II 解题报告(Python & Java)

作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


目录

    • 题目描述
    • 题目大意
    • 解题方法
      • 计算出每一行
      • 原地计算
    • 日期

[LeetCode]

题目地址:[https://leetcode.com/problems/pascals-triangle-ii/][1]

Total Accepted: 74643 Total Submissions: 230671 Difficulty: Easy

题目描述

Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal’s triangle.

Note that the row index starts from 0.

在这里插入图片描述

In Pascal’s triangle, each number is the sum of the two numbers directly above it.

Example:

Input: 3
Output: [1,3,3,1]

Follow up:

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

题目大意

计算杨辉三角的第k行是多少。

解题方法

计算出每一行

把杨辉三角的每一行都计算出来,这样就和118. Pascal’s Triangle一模一样了。

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        res = [[1 for j in range(i + 1)] for i in range(rowIndex + 1)]
        for i in range(2, rowIndex + 1):
            for j in range(1, i):
                res[i][j] = res[i - 1][j - 1] + res[i - 1][j]
        return res[-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;

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

python代码如下:

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        res = [1] * (rowIndex + 1)
        for i in range(2, rowIndex + 1):
            for j in range(i - 1, 0, -1):
                res[j] += res[j - 1]
        return res

Java代码如下:

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

日期

2016 年 05月 8日
2018 年 11 月 21 日 —— 又是一个美好的开始

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

你可能感兴趣的:(LeetCode,算法)