[leetcdoe] Pascal's Triangle II 解题报告

题目链接:https://leetcode.com/problems/pascals-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?   

思路:本题是返回杨辉三角的一行,根据杨辉三角的性质可以知道,一行的值是对称的,并且为

C(n,0), C(n, 1), C(n, 2), C(n, 3),.... , C(n, n-1), C(n, n)

由于对称,所以只需要计算一半。

C(n, 0) = 1

C(n, 1) = n/1

C(n, 2) = n*(n-1)/(1*2)

C(n, 3) = n*(n-1)(n-2)/(1*2*3)

....

因此可以得出规律,每一项分子增加一个数,分母增加一个数,即可直接产生出一行的每一个数。

但是要注意有个坑,就是分子有可能乘积整型溢出,因此可以让分母为long型,就会将结果自动转型为long,这样就不会溢出了。

long int在64位机器上是8字节,32位机器是4字节,因此leetcode的后台估计是64位的吧。

时间复杂度为O(n), 不需要额外的空间

代码如下:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> result;
        result.resize(rowIndex + 1);
        result[0] = result[rowIndex] = 1;
        for(long int i =1; i<= rowIndex/2; i++)
            result[i] = result[rowIndex - i] = result[i-1] * (rowIndex - i + 1)/i;
        return result;
    }
};





你可能感兴趣的:(LeetCode,array,数组)