LeetCode-118:Pascal's Triangle (生成指定行数的杨辉三角)

Question

Given numRows, generate the first numRows of Pascal’s triangle.

For example:

given numRows = 5
Return
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

Idea

给定行数,生成指定行数的Pascal’s triangle(又称,杨辉三角)。

  1. 直接使用Pascal三角的生成方式进行解题.
    Java

    • 使用ArrayList>结构存储将要返回的Pascal三角的所有行;
    • 使用ArrayList结果存储单行.

    Python

    • 使用Python中的list存储Pascal三角,和Java的结构相同。

Code

ArrayList—Java

public class Solution {
    public List> generate(int numRows) {
        List> allrows = new ArrayList>();
        ArrayList row = new ArrayList();
        for (int i=0; i0,1);
            for(int j=1; j1;j++){
                row.set(j, row.get(j)+row.get(j+1));
            }
            allrows.add(new ArrayList(row));
        }
        return allrows;
    }
}

生成Pascal三角主要包括三个过程:

  • 首先生成行,利用ArrayList的add()方法,对首位添1—row.add(0,1);
  • 对从第三行开始的行,利用已经生成好的行(这里相当于是上一行元素)进行相应元素的替换,利用set()方法;
  • 将生成的行添加到Pascal三角的ArrayList>结构中.

List—Python

class Solution(object):
    def generate(self, numRows):
        """
        :type numRows: int
        :rtype: List[List[int]]
        """
        L = [[1]]
        if numRows < 1:
            return []
        if numRows == 1:
            return L
        i = 1
        while i < numRows:
            L.append([sum(res) for res in zip([0]+L[i-1],L[i-1]+[0])])
            i = i + 1
        return L
  • 通过观察Pascal三角的结构,从第三行开始,其每一行的list,等于前一行的list分别在首位添1和在末位添1对应位相加所得的结果;
  • 这里使用Python内建函数zip()对两个list进行对应位置的组合相加;
  • 利用Python编写的该方法目前在执行时间上耗费较大,LeetCode目前运行时间:85ms,3.13%的beats率。

你可能感兴趣的:(LeetCode刷题,LeetCode,刷题)