LeetCode0062、0070、0078

38 篇文章 0 订阅
26 篇文章 0 订阅
  1. LeetCode0062

  2. 代码:

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            f = [[1] * n] + [[1] + [0] * (n - 1) for _ in range(m - 1)]
            #注意,这里[1] * n是先创建了一个全是1的1*n维的行矩阵,然后在让其加上两个开头为1 的(m-1)* n 维的矩阵。
            #print(f)
            for i in range(1, m):
                for j in range(1, n):
                    f[i][j] = f[i - 1][j] + f[i][j - 1]
            return f[m - 1][n - 1]
    
    m, n  = 3, 7
    a = Solution()
    print(a.uniquePaths(m, n))
    

    思路:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H31NBFYq-1611046494447)(/home/lx/.config/Typora/typora-user-images/image-20210119160455339.png)]

因为出发点是在左上角,终点在右下角,所以每一格的状态只与其左边和上方这两格的状态有关,所以动态方程是dp[i][j] = dp[i][j-1] + dp[i-1][j],如果出发点不同的话,动态转移方程也会不同。

  1. 优化后:

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            cur = [1] * n
            for i in range(1, m):
                for j in range(1, n):
                    cur[j] += cur[j-1]
            return cur[-1]
    
    m, n = 3, 7
    a = Solution()
    print(a.uniquePaths(m, n))
    

    利用遍历的同时累加列的方式,大大缩小了空间复杂度,将空间复杂度降低到O(n),大力称赞这种做法,剪枝太神奇了。

  2. LeetCode0070

class Solution:
    def climbStairs(self, n: int) -> int:
        if n==1 or n==2: return n
        a, b, temp = 1, 2, 0
        for i in range(3,n+1):
            temp = a + b
            a = b
            b = temp
        return temp

依旧是动态规划,不多说了,思路和官方的一样,很简单

  1. LeetCode0078

代码:

res = [[]]
        for i in nums:
            res = res + [[i] + num for num in res]
        return res

思路:利用迭代方法,目前还在看其他的思路,还不是太理解别人的,我再下去理解理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值