zoukankan      html  css  js  c++  java
  • 每日leetcode-数组-119. 杨辉三角 II

    分类:数组-二维数组及滚动数组

    题目描述:

    给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

    在杨辉三角中,每个数是它左上方和右上方的数的和。

    解题思路:

    1.先生成k行的杨辉三角,再返回最后一行即第k行。

    class Solution:
        def getRow(self, rowIndex: int) -> List[int]:
            ret = []
            for i in range(1,rowIndex+2):
                temp = [1 for i in range(i)]
                for j in range (1,len(temp)-1):
                    temp[j] = ret[i-2][j-1]+ret[i-2][j]
                ret.append(temp)
            return ret[-1]
    class Solution:
        def getRow(self, rowIndex: int) -> List[int]:
            ret = list()
            for i in range(rowIndex+1):
                row = list()
                for j in range(0, i + 1):
                    if j == 0 or j == i:
                        row.append(1)
                    else:
                        row.append(ret[i - 1][j] + ret[i - 1][j - 1])
                ret.append(row)
            return ret[-1]

    2.用一维数组,类似于动态规划中的滚动数组思想。

    使用一维数组,然后从右向左遍历每个位置,每个位置的元素res[j]+= 其左边的元素 res[j - 1]。

    为啥不从左向右遍历呢?因为如果从左向右遍历,那么左边的元素已经更新为第 i 行的元素了,而右边的元素需要的是第 i - 1行的元素。故从左向右遍历会破坏元素的状态。

    class Solution:
        def getRow(self, rowIndex: int) -> List[int]:
            ret = [1] * (rowIndex + 1)
            for i in range(2, rowIndex + 1):
                for j in range(i - 1, 0, -1): #倒序取到下标为0的位置,但是不包括0
                    ret[j] += ret[j - 1]
            return ret
  • 相关阅读:
    堆和栈的区别
    VS-Visual Studio-IIS Express 支持局域网访问
    理解Session的几种模式
    HTTP Keep-Alive模式
    C#[Serializable]在C#中的作用-NET 中的对象序列化
    深入理解asp.net SessionState
    .NET中JSON的序列化和反序列化
    数据库相关命名规范
    PHPStorm+PHP5.6+WIN7+IIS7
    深入理解C# 静态类与非静态类、静态成员的区别
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14731257.html
Copyright © 2011-2022 走看看