回溯
回溯算法
低头看天,抬头走路
句句都是正确的废话,招招都是致命的空招。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode90. 子集 II
题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 思路 1.类似leetcode78. 子集,但要去重 2.先排序 3.当连续重复数字时, 允许1 1 1 0 0,不允许 1 0 1 0 1或者1 0 0 1 1,即前一个重复数字未选取时,当前数字选取会造成重复 实现 // 去重:当连续重复数字原创 2021-01-10 23:34:30 · 431 阅读 · 0 评论 -
剑指offer第28题:字符串的排列
输入:abc 输出:abc acb bac bca cab cba 思路: 字符串由两部分组成,第一个字符和后面的部分 1。先求所有可能出现在第一个位置的字符, 2。固定第一个字符,求后面字符的排列,递归public class Permutation { // 剑指offer第28题,字符串的排列 public void permutation(char[] ch){原创 2016-07-31 23:53:52 · 980 阅读 · 0 评论 -
leetcode79. 单词搜索
题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 思路 回溯递归 实现 class Solution { public: bool exist(vector<vector<char>>& board, string word) { for(int i = 0; i < board.size(原创 2020-08-06 00:39:02 · 174 阅读 · 0 评论 -
leetcode40.组合总和 II
题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 示例 1: 输入: candidates = [10,1,2,7,6,1,5], target = 8, 所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ] 示例 2:原创 2020-07-29 23:48:12 · 175 阅读 · 0 评论 -
leetcode131. 分割回文串
题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ] 思路 递归回溯 实现 class Solution { public: vector<vector<string>> partition(string s) { ...原创 2019-07-21 17:02:29 · 234 阅读 · 0 评论 -
leetcode78. 子集
题目 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 思路 1.回溯 2.递归 类似题目 leetcode77. 组合 leetcode46. 全排列 实现 class Solut...原创 2019-07-17 00:13:35 · 320 阅读 · 0 评论 -
leetcode77. 组合
题目 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 思路 1.回溯 2.递归 类似题目leetcode46. 全排列 实现 class Solution { public: vector<vector<int...原创 2019-07-16 23:39:18 · 235 阅读 · 0 评论 -
leetcode47. 全排列 II
题目 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] 思路 1.递归回溯 2.注意去重复 3.类似leetcode46. 全排列 实现 class Solution { public: vector<vector<int&g...原创 2019-08-06 00:05:13 · 139 阅读 · 0 评论 -
leetcode46. 全排列
题目 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 递归 1.求所有可能出现在第一位的字符(第一位和后面所有字符做交换) 2.固定住第一个,求后面所有字符的排列 实现 class Solution { public: vec...原创 2019-07-15 23:24:38 · 232 阅读 · 0 评论 -
leetcode39 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ [7]...原创 2019-08-05 22:06:30 · 142 阅读 · 0 评论 -
leetcode17. 电话号码的字母组合
题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 思路 回溯递归 实现 class Solution { map<char, string> a = ...原创 2019-07-22 22:42:34 · 157 阅读 · 0 评论 -
leetcode22. 括号生成
题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3,生成结果为: [ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ] 思路 递归,控制左括号和右括号个数。 实现 class Solution { public: vector<string> generat...原创 2019-07-14 20:10:21 · 134 阅读 · 0 评论
分享