蓝桥杯第六天

1力扣题目43

在这里插入图片描述

1思路

  • 题目要求不允许使用int()函数,是为了让单纯再字符串条件下实现乘法,但是还是可以在单独字符中使用,其目的考验增加额外数由于相乘导致的进位
  • 我们可以倒着相乘,如果进位就记下,在下一次迭代时增加
  • 然后经过事件复杂度O(n2)的运算,可以成功迭代完毕
  • 最后加上为0的情况,在开头增添意外的字符串0

代码

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        if num1 == '0' or num2 == '0':
            return '0'

        result = [0] * (len(num1) + len(num2))
        rst_str = ['0'] * (len(num1) + len(num2))
        for i in range(len(num1)-1,-1,-1):
            for j in range(len(num2) - 1, -1, -1):
                nm = str(int(num1[i]) * int(num2[j]))
                l = len(nm) - 1
                for k in range(j+i+1,j+i-len(nm)+1,-1):
                    result[k] += int(nm[l])
                    if result[k] >= 10:
                        result[k-1] += result[k]//10
                        result[k] %= 10
                    l -= 1
                    rst_str[k] = str(result[k])
        rst_str[0] = str(result[0])

        if rst_str[0] == '0':
            rst_str = rst_str[1:]
        return ''.join(rst_str)

这应该算是暴力算法吧

二力扣题库47

在这里插入图片描述

1思路

  • 学题解的,名字叫回溯模板如下

  • 回溯法 采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

  • 找到一个可能存在的正确的答案;

  • 在尝试了所有可能的分步方法后宣告该问题没有答案。
    在这里插入图片描述

2代码

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        result = []
        visited = [False] * len(nums)
        def backtrack(tmp):
            if len(tmp) == len(nums):
                result.append(tmp)
                return 
            for i in range(len(nums)):
                if visited[i]:
                    continue
                visited[i] = True
                backtrack(tmp + [nums[i]])
                visited[i] = False
            return result
        return backtrack([])

三力扣53

在这里插入图片描述

1思路

  • 这篇题目和之前做过的最大的水杯容器很类似,都取一个max来在迭代中比较新解和旧街,可参考我第三天的博客
  • 这道和拿到不同的是我们还要加入一个量minest来记录这个迭代过程中,新解总数减去这个最小值,这个最小值储存的是我们前面所以连续的子序列的最小和,这样我们就不用从中间记录
  • 加入的minest是直接让我们加的和是从头到尾,然后通过减去minest得到跨国某个减小的子序和

2代码

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_sum,minest,total,res=0,0,0,max(nums)
        if res<0:
            return res
        for i in nums:
            total += i
            if total < minest:
                max_sum = max(max_sum, total - minest)
                minest = total
            else:
                max_sum = max(max_sum, total - minest)
        return max_sum

第一个有点难,希望下次分享有大佬能给我思路,回溯也不太熟,多连吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值