Leetcode题解 0013期

(昨天摸了,因为手上有点别的东西,然后把那个忙完了,结果发现过零点了……然后又突然来了个事情,结果就耽误了。不过其实只有一天的话,第二天补上就行,今天额外来补一下昨天落下的刷题)

0040题 组合总和 II【Combination Sum II】

题目:
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。
说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。

示例:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:
[
  [1, 7],
  [1, 2, 5],
  [2, 6],
  [1, 1, 6]
]

输入: candidates = [2,5,2,1,2], target = 5,
所求解集为:
[
  [1,2,2],
  [5]
]

题目相对严谨,注意是一个数字而不是一种数字

除Robust以外无需注意太多

解题思路:
这题其实和第0039题思路一样,都是回溯,其实说是回溯实际上是DFS,深度优先搜索和回溯感觉还是有些区别的,这题简单吧,不post代码了。


0043题 字符串相乘【Multiply Strings】

题目:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9。
  3. num1 和 num2均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

示例:

输入: num1 = "2", num2 = "3"
输出: "6"

输入: num1 = "123", num2 = "456"
输出: "56088"

题目相对严谨

除Robust以外无需注意太多

解题思路:
就是高精度乘法,还起名叫什么字符串乘法,有点搞笑。话说竟然看到久违的BigInteger,也是不易23333,高精度算法其实没有什么难点,就是模拟题目,所以无需post代码。


0046题 全排列【Permutations】

题目:
给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

题目相对严谨

经典回溯题目除Robust以外无需注意太多

解题思路:
全排列也是回溯算法的典型代表之一了,这……也不用post代码吧,直接AC掉。
(话说python是不是有这个permutation的生成器,貌似可以import itertools来着23333


0047题 全排列 II【Permutations II】

题目:
给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

题目相对严谨

除robust外无需注意太多

解题思路:
上题相仿,不过试验了一下貌似这次itertools就没用了,真的不智能啊,那个库

不过在解法中发现了一种活用slicing的解法,感觉颇有意思,post在下方:

class Solution:
    def permuteUnique(self, nums):
        ans = [[]]
        for n in nums:
            ans = [l[:i]+[n]+l[i:]
            for l in ans
               for i in range((l+[n]).index(n)+1)]
        return ans

今天摸鱼就到这儿了,我去忙我的tensorflow去了,那个太难搞(

猜你喜欢

转载自blog.csdn.net/bright_silmarillion/article/details/80677824