
回溯
回溯算法
低头看天,抬头走路
句句都是正确的废话,招招都是致命的空招。
展开
-
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 · 399 阅读 · 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 · 941 阅读 · 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 · 151 阅读 · 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 · 151 阅读 · 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 · 209 阅读 · 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 · 291 阅读 · 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 · 209 阅读 · 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 · 124 阅读 · 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 · 203 阅读 · 0 评论 -
leetcode39 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7]...原创 2019-08-05 22:06:30 · 122 阅读 · 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 · 138 阅读 · 0 评论 -
leetcode22. 括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路递归,控制左括号和右括号个数。实现class Solution {public: vector<string> generat...原创 2019-07-14 20:10:21 · 118 阅读 · 0 评论