生成Pascal三角形的边角案例

时间:2019-04-17 06:11:47

标签: python algorithm

我正在努力解决问题Pascal's Triangle - LeetCode

  

给出一个非负整数 numRows ,生成Pascal三角形的第一个 numRows

     

在Pascal的三角形中,每个数字都是其正上方的两个数字的和。

     

示例:

Input: 5
Output:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

我的解决方案:

class Solution:
    def __init__(self):
        self.res = [[]]
    def generate(self, numRows: int) -> 'List[List[int]]':
        #base case 
        if numRows == None: return None 
        if numRows == 0: return None
        pt = []
        for i in range(1, numRows+1):
            row = [1] * i
            pt.append(row)
        if numRows <=2: return pt

        #recur relations 
        for i in range(2, numRows): #start from row  3
            for j in range(1, len(pt[i])-1):#column, 
                #logging.debug(f"i:{i}, i-1:{i-1}, j:{j}, j-1:{j-1}")
                pt[i][j] = pt[i-1][j-1] + pt[i-1][j]
        return pt

不幸的是,未能通过leetcodes的Testcase:

  

numRows = 0,应为[],但输出为None。

我曾经事先想过,如果numRows为0,则意味着该行不存在,而不是存在一行但元素为零的行。

numRow == 0与numRow = None相同,与my_salary = 0(免费工作)和my_salary == None(无工作)不同

以一种清晰的方式来说明,薪水可以是负数,但是当我们需要花费数年的时间来将图片渲染成一个后洞时,在当前技术上却无法得到负数。

如何理解默认设置numRows = 0,却得到[]

1 个答案:

答案 0 :(得分:1)

在您的示例中,有一个外部列表围绕所有内部数字列表(行)。即使没有行,此外部列表也将始终存在。它始终是包含numRows个元素的列表,因此,如果numRows == 0则是包含0个元素的列表。

基本上只需删除您一开始的两项if numRows ==检查,它就可以通过测试用例。