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

来源:互联网 发布:java编程入门视频 编辑:程序博客网 时间:2024/05/22 16:41

Question

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

For example:

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

Idea

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

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

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

    Python

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

Code

ArrayList—Java

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

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

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

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率。
阅读全文
0 0
原创粉丝点击