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<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值