LeetCode50题第8天

LeetCode第62题: 不同路径

  1. 使用动态规划, 创建一个m行n列的数组, 第一行和第一列都标为一(如果数组只有一行或者一列, 返回1), 如果不是第一行或者第一列, 那么它的值就是它的左边加上他的上边. 返回值
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m <= 1 or n <= 1:
            return 1
        array = []
        i = 0
        j = 0
        while i < m:
            array.append([])
            j = 0
            while j < n:
                array[i].append(0)
                j += 1
            i += 1
        i = 1
        while i < n:
            array[0][i] = 1
            i += 1
        i = 1
        while i < m:
            array[i][0] = 1
            i += 1
        i = 1
        while i < m:
            j = 1
            while j < n:
                array[i][j] = array[i - 1][j] + array[i][j -1]
                j += 1
            i += 1
        return array[m - 1][n - 1]
        

复杂度分析: 本算法需要遍历二维列表, 复杂度为O(mn)

LeetCode第70题: 爬楼梯

  1. 仍然是动态规划, steps[i] = steps[i -1] + steps[i - 2], 根据这个方程式可以推出第n阶台阶的结果树
class Solution:
    def climbStairs(self, n: int) -> int:
        l = [0] * (n + 1)
        l[0] = 1
        l[1] = 1
        i = 2
        while i <= n:
            l[i] = l[i - 1] + l[i -2]
            i += 1
        return l[n]

LeetCode第78题: 子集

  1. 使用动态规划, 每个nums[i]的子集为nums[i - 1]的集合每一个元素与[nums[i]]的和在加上nums[i-1]的集合
class Solution:
    def subsets(self, nums):
        result = [[]]
        length = len(nums)
        for i in range(0, length):
            mid = []
            for j in range(0, len(result)):
                mid.append(result[j][:])
            for j in range(0, len(mid)):
                mid[j] += [nums[i]]
                # print(mid)
            result += mid
        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值