(递归+回溯+剪枝)面试题 08.08. 有重复字符串的排列组合
摘要:Leetcode链接:面试题 08.08. 有重复字符串的排列组合 难度:中等 思考: 这道题主要用到位置交换的的思想,重点是对于同一个位置,如果两个元素相同,那么只能把这个元素放在这个位置一次,否则会造成重复,所以在剪枝操作的时候需要特别注意。 1 //通过字符串之间的顺序置换,来得到不同的字符串
阅读全文
课程表(拓扑排序)
摘要:题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学
阅读全文
(动态规划)不同的二叉搜索树
摘要:题目描述 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 链接:https://l
阅读全文
下一个排列(数组推导)
摘要:题目描述 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。 示例 1: 输入:nums = [1,2,3] 输出:[1,3,2] 示例 2: 输入:n
阅读全文
单词拆分(动态规划)
摘要:题目描述 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1: 输入: s = "leetcode", wordDict = ["leet"
阅读全文
在排序数组中查找第一个元素和最后一个元素(二分法)
摘要:题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1: 输入:nums =
阅读全文
实现Trie(前缀树)(多叉树)
摘要:题目描述 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入
阅读全文
零钱兑换(动态规划)
摘要:题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例 1: 输入:coins = [1, 2, 5], amount = 11输出:3
阅读全文
字母异位词分组(Hash表映射)
摘要:题目描述 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]] 思
阅读全文