• Pascal's 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].

    Pascal's Triangle为给出行数,求所有结果,这题是给出任意行号,求该行的结果。 

    Pascal's Triangle本身需要返回二维结果,可以在二维数组上直接操作。但是这题需要返回一维的结果,直接采用之前的思路是不太好的。所以此处采用一个滚动数组,用数组的变化去不断模拟从上到下的每一行。具体处理时的顺序值得处理,一种是从左到右,但是实际res[n][j]=res[n-1][j]+res[n-1][j-1]。从前往后走存在值覆盖的问题,需要用到中间变量。另外一种是,根据这种转化关系,从右往左扫。当前值的处理不会影响下一步的操作,因为下一步的操作只涉及到更之前的值。

    从左到右,44ms,代码:

    class Solution(object):
        def getRow(self, rowIndex):
            """
            :type rowIndex: int
            :rtype: List[int]
            """
            if not rowIndex:
                return [1]
            row = [1,1]
            for i in range(1,rowIndex):
                prev = 1
                for j in range(1,i+1):
                    tmp = row[j]
                    row[j] += prev
                    prev = tmp
                row.append(1)
            
            return row
            

    从右到左,40ms,代码:

    class Solution(object):
        def getRow(self, rowIndex):
            """
            :type rowIndex: int
            :rtype: List[int]
            """
            if not rowIndex:
                return [1]
            row = [1]
            for i in range(1,rowIndex+1):
                for j in range(i-2,-1,-1):
                    row[j+1] +=row[j] 
                row.append(1)
            return row

    从右往左有一个更优解法,减少了一步迭代,然而目前还没看懂,也附上代码:

    class Solution(object):
        def getRow(self, rowIndex):
            """
            :type rowIndex: int
            :rtype: List[int]
            """
    
            array = [1]*(rowIndex+1)
    
            for i in range(1,rowIndex+1):
                for j in range(i-1,0,-1):
                    array[j] += array[j-1]
    
            return array

     这题设计空间使用的考察,可能会出现在电面中。

  • 相关阅读:
    Sudoku POJ 2676 [dfs]
    a>b和(*a).b
    lowbit()操作
    Anniversary party HDU 1520树形dp
    Lifting the Stone HDU 1115 求多边形的重心
    Boolean Expressions POJ 2106 【递归】
    Shaolin HDU 4585 STL map||Treap树
    取石子游戏 HDU 1527 威佐夫游戏
    A Simple Problem with Integers POJ 3468 区间修改线段树lazy—tag大法
    社会性网络软件SNS 帮助你认识比尔盖茨 java程序员
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5448854.html
Copyright © 2020-2023  润新知