回溯法
秦枫-_-
慵懒的程序猿
展开
-
C++输出一个整数序列所有子序列且子序列不重复(回溯法)
用树的思想来看这道题,以nums={1,2,2}为例,先取1子序列,沿着1,递归继续往后取,path不断叠加子序列,同时result也不断实时更新将path加入,到底部以后先pop_back()弹出,递归返回上一层,如果发现下一个循环中要取的元素和前一个取的相同,则路径重复,不能再取了,pop_back,继续返回上一层,以此类推,每个大路径的子路径都是一部回溯,直至回溯至根部,继续下一个大路径的递归然后回溯,即可得出结果。回溯法思路是:搜索每一条路,每次回溯是对具体的一条路径而言的。对当前搜索路径下的..原创 2021-03-31 13:51:16 · 2240 阅读 · 2 评论 -
C++回溯法(2)+动态规划(3)----数字翻译成字符串
如题:这道题有两种方法解决,但其实思想都是一个思想,首先分析题目,无非就是如果一个数在0-25范围内就可以翻译成相应的字母,在这之外就不行了,那么分析单个数,一定可以翻译,那么分析两个数合在一起,如果大于25或者像05这种小于10的则不可翻译,那我们从末尾看起,如果说末尾两个数可以翻译,那最后一个数就有两种翻译方式供我们选择,一个是单独翻译,一个是和它前面的数两个合在一起翻译。单独翻译的话:那么是不是去掉最后一位,前i-1位和前i位方案种类不变所以dp[i]=dp[i-1];如果两个合在一起翻译:.原创 2021-03-22 19:37:34 · 132 阅读 · 1 评论 -
C++回溯法(1)--分割回文串
回溯法的简单例子利用回溯法输出一个字符串的所有可能的回文字符串,首先回文字符串可以记忆成对称形式的字符串,例如:efe,abba,即正读和反读都一样的字符串。// 代码#include <iostream>#include<vector>#include<string>#include<assert.h>#include <stdlib.h>using namespace std;class Solution {publ原创 2021-03-09 22:43:02 · 1053 阅读 · 1 评论