生成不含相邻零的二进制字符串-LeetCode
3211. 生成不含相邻零的二进制字符串 🎯 问题描述(来源于LeetCode) 描述: 给定一个正整数 n,请你返回所有长度为 n 的二进制字符串,且字符串中不包含两个连续的 0。 可以按任意顺序返回答案。 说明: 字符串由字符 '0' 和 '1' 组成。 不允许出现子串 "00"。 示例: 示例 1: 123输入: n = 3输出: ["010","011","101","110","111"]解释: 所有长度为3不含"00"的二进制字符串。 示例 2: 12输入: n = 1输出: ["0","1"] 💻 解题思路 思路:回溯法(DFS) + 剪枝 算法步骤 初始化结果列表 ans 和长度为 n 的路径列表 path。 定义递归函数 dfs(i),表示当前正在确定第 i 个字符(0‑indexed): 如果 i == n,将 path 拼接成字符串加入 ans 并返回...
组合-LeetCode
77. 组合 - Combinations 🎯 问题描述(来源于LeetCode) 描述: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 可以按任意顺序返回答案。 说明: 组合中的元素不能重复(每个数字只能使用一次)。 顺序不同的相同组合视为同一组合。 示例: 示例 1: 12输入: n = 4, k = 2输出: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]] 示例 2: 12输入: n = 1, k = 1输出: [[1]] 💻 解题思路 思路:回溯法(逆序枚举 + 剪枝) 算法步骤 初始化结果列表 ans 和当前路径列表 path。 定义递归函数 dfs(i),其中 i 表示当前可选的数字上限(从 i 开始向下选择): 计算剩余需要选的数字个数 d = k - len(path)。 如果 d == 0,说明已选满 k 个数,将 path 的副本加入 ans 并返回。 如果 i > d,则尝试不选当前数字 i:递归 dfs(i-1)(跳过 i)。 然后尝试选当前数字 i:将 i...
组合总和 II-LeetCode
40. 组合总和 II - Combination Sum II 🎯 问题描述(来源于LeetCode) 描述: 给定一个数组 candidates 和一个目标数 target,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 解集不能包含重复的组合。 说明: 所有数字(包括目标数)都是正整数。 数组中可能包含重复数字。 组合中的数字可以按任意顺序排列,但解集中不能有重复组合。 示例: 示例 1: 12输入: candidates = [10,1,2,7,6,1,5], target = 8输出: [[1,1,6],[1,2,5],[1,7],[2,6]] 示例 2: 12输入: candidates = [2,5,2,1,2], target = 5输出: [[1,2,2],[5]] 💻 解题思路 思路:回溯法(DFS) + 排序剪枝 + 提前终止 算法步骤 将 candidates 排序,方便跳过重复元素以及提前剪枝。 初始化结果列表 ans、当前路径列表 pat...
组合总和 III-LeetCode
216. 组合总和 III - Combination Sum III 🎯 问题描述(来源于LeetCode) 描述: 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 到 9 的正整数,且每个组合中的数字不能重复使用(每个数字最多用一次)。 返回所有可能的有效组合的列表。答案可以按任意顺序返回。 说明: 组合中的数字不要求顺序(即 [1,2,3] 和 [3,2,1] 被视为同一组合)。 数字范围固定为 1...9。 示例: 示例 1: 12输入: k = 3, n = 7输出: [[1,2,4]] 示例 2: 12输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]] 示例 3: 12输入: k = 4, n = 1输出: [] 💻 解题思路 思路:回溯法(逆序枚举 + 剪枝) 算法步骤 初始化结果列表 ans 和当前路径列表 path。 定义递归函数 dfs(i, target),其中 i 表示当前可选的数字上限(从 i 向下选择),target 表示剩余需要凑的和: 计算还需选的数字个...
连续差相同的数字-LeetCode
967. 连续差相同的数字 - Numbers With Same Consecutive Differences 🎯 问题描述(来源于LeetCode) 描述: 返回所有长度为 n 的非负整数(不含前导零),其相邻两个数字的差的绝对值恰好为 k。 可以按任意顺序返回答案。 说明: n 的范围是 [2, 9](实际题目中 n 可能为 1,但本题要求长度为 n,且不含前导零,因此 n=1 时答案为 0..9,但通常 n≥2)。 k 的范围是 [0, 9]。 结果中的整数不应有前导零(即第一位不能为 0)。 示例: 示例 1: 123输入: n = 3, k = 7输出: [181,292,707,818,929]解释: 所有满足条件的3位数:1-8-1, 2-9-2, 7-0-7, 8-1-8, 9-2-9。 示例 2: 12输入: n = 2, k = 1输出: [10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98] 💻 解题思路 思路:回溯法(DFS)逐位构建 算法步骤 初始化结果列表 ans。 定义...
递增子序列-LeetCode
491. 递增子序列 - Non-decreasing Subsequences 🎯 问题描述(来源于LeetCode) 描述: 给定一个整数数组 nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。 可以按任意顺序返回答案。 数组中的元素可能重复,但两个子序列如果元素相同(顺序相同)则视为相同子序列,因此需要去重。 说明: 子序列不要求连续,但顺序必须与原数组顺序一致。 递增子序列是严格递增的吗?题目要求「递增」通常指非递减(即允许相等),但原题描述为「递增子序列」,实际测试用例中相等的元素视为不递增(如 [4,4] 是否有效?LeetCode 491 的示例中 [4,4] 不被认为是递增子序列)。注意:题目中的「递增」通常指严格递增(nums[i] < nums[j])。但在你的代码中使用了 nums[i] >= path[-1],即允许相等,这可能导致不符合题目要求。需根据实际题意确认。 示例: 示例 1: 12输入: nums = [4,6,7,7]输出: [[4,6],[4,6,7],[4,6,7,7],[4,7],[...
单词拆分 II-LeetCode
140. 单词拆分 II - Word Break II 🎯 问题描述(来源于LeetCode) 描述: 给定一个字符串 s 和一个字符串列表 wordDict,将 s 拆分成一个或多个在字典中出现的单词,返回所有可能的句子。 单词可以重复使用,且拆分后的单词按原顺序组成句子,单词之间用空格分隔。 说明: 字典中的单词互不相同。 同一个单词可以在拆分中多次使用。 示例: 示例 1: 12输入: s = "catsanddog", wordDict = ["cat","cats","and","sand","dog"]输出: ["cats and dog","cat sand dog"] 示例 2: 12输入: s = "pineapplepenapple", wordDict = ["apple","pen","applepen&quo...
复原 IP 地址-LeetCode
93. 复原 IP 地址 - Restore IP Addresses 🎯 问题描述(来源于LeetCode) 描述: 给定一个只包含数字的字符串 s,用以表示一个 IP 地址,返回所有可能的有效 IP 地址(IPv4)。 有效 IP 地址由四个整数(每个在 0 到 255 之间)组成,且整数之间用 '.' 分隔。 不能包含前导零(例如 01 无效),但整数 0 本身是有效的。 说明: 字符串 s 的长度在 1 到 20 之间。 需要枚举所有可能的分割方式,返回所有有效的 IP 地址。 示例: 示例 1: 12输入: s = "25525511135"输出: ["255.255.11.135","255.255.111.35"] 示例 2: 12输入: s = "0000"输出: ["0.0.0.0"] 示例 3: 12输入: s = "101023"输出: ["1.0.10.23","1.0.102.3&qu...
将字符串拆分为递减的连续值-LeetCode
1849. 将字符串拆分为递减的连续值 🎯 问题描述(来源于LeetCode) 描述: 给定一个字符串 s,判断是否能将其拆分成一个或多个连续递减 1 的整数序列(至少两个整数)。 每个子串表示一个整数,且不能有前导零(除非整数本身就是 0)。 拆分时必须使用所有字符,子串顺序不变。 说明: 数字序列应为 k, k-1, k-2, ... 的形式。 例如 "1234" 可以拆成 [1,2,3,4],但这里要求递减,所以 "4321" 可以拆成 [4,3,2,1]。 注意:0 的特殊性,例如 "1001" 可以拆成 [10,0,1]?这里不连续,所以不行。 示例: 示例 1: 123输入: s = "1234"输出: false解释: 无法拆分成递减1的连续整数序列(只有递增)。 示例 2: 123输入: s = "050043"输出: true解释: 可以拆成 ["05","00","43"]?不对,数字...
拆分字符串使唯一子字符串的数目最大-LeetCode
1593. 拆分字符串使唯一子字符串的数目最大 🎯 问题描述(来源于LeetCode) 描述: 给定一个字符串 s,请你将该字符串分割成若干非空子串,使得所有子串都是互不相同的。 返回可以分割得到的最大子串数目。 说明: 子串是原字符串中连续的一段。 分割方案中,所有子串按原顺序拼接应等于 s。 相同子串不能出现两次。 示例: 示例 1: 123输入: s = "ababccc"输出: 5解释: 一种分割方式为 ["a", "b", "ab", "c", "cc"],共 5 个互不相同的子串。 示例 2: 123输入: s = "aba"输出: 2解释: 一种分割方式为 ["a", "ba"] 或 ["ab", "a"],最多 2 个。 示例 3: 123输入: s = "aa"输出: 1解释: 只能分割成 ["...













