回溯
cc 提升ing 变优秀ing
有需要搜广推nlp实习生的部门吗?
展开
-
leetcode:52. N皇后 II(回溯,状态压缩,困难)
题目:分析:参考视频代码:class Solution {public: int ans=0; void f(int n,int h,int r1,int r2,int r3) { if(h==n) { ans++; return ; } for(int i=0;i<n;i++) { int c=2<<原创 2020-12-07 20:06:54 · 90 阅读 · 0 评论 -
leetcode :394. 字符串解码(回溯,中等)
题目:分析:只说一句,在外面加一层1【 。。】使得初始问题一般化。代碼:class Solution: def decodeString(self, s: str) -> str: x = 0 s = '1['+s+']' def f() -> str: nonlocal x c=0 # 取数字 while s[x].isnumeric(原创 2020-12-04 11:07:24 · 80 阅读 · 0 评论 -
leetcode:剑指 Offer 38. 字符串的排列(中等)
题目:分析:考虑到了aab这种重复,但是自己只是简单的做了这种last:(而且刚开始忘记了先排序),哦,是完全可以的。相当于把重复的都剪了。#include<bits/stdc++.h>using namespace std;vector<string> vs; void f(string s,vector<int> v,string ans){ char last='0'; if(ans.length()==s.length()) { vs.p原创 2020-10-20 10:51:32 · 81 阅读 · 0 评论 -
leetcode:78. 子集(中等,回溯)
题目:分析:简单题,但是花了挺长实践。1,想到了统计个数。2.没有搞清最终作为结果还是在过程中就作为结果。代码:class Solution {public:map<int,int> m;vector<vector<int> > vv; vector<int> v;void f(vector<int> v2,int x){ if(x==v.size()) { vv.push_back(v2);原创 2020-09-20 22:03:50 · 73 阅读 · 0 评论 -
洛谷:P1990 覆盖墙壁(回溯,普及+/提高 )
题目:分析:leetcode寒假做过吧,不再赘述,这次能独立想出来不错。x列放了0个,之后的放置方法。x列只放了一个,之后的放置方法。直接上述剥离模拟:超时:#include<bits/stdc++.h>using namespace std;int f(int x,int c1){ if(x==0) { if(c1==1) return 0; else return 1; } if(x<0) return 0; int ans=0; if(c1原创 2020-09-09 21:32:33 · 515 阅读 · 0 评论 -
洛谷:P3612 [USACO17JAN]Secret Cow Code S(回溯,普及+/提高)
题目:分析:先暴力看看。T了#include<bits/stdc++.h>using namespace std;string s;int main(){ string st; getline(cin,st); stringstream ss(st); ss>>s; long long m; ss>>m; while(1) { if(s.size()>=m) break; string s2=s.substr(0,s.size(原创 2020-09-09 18:26:44 · 335 阅读 · 0 评论 -
洛谷:P1928 外星密码(回溯,)
题目:分析:leetcode之前做过。代码质量应该有提高。代码:#include<bits/stdc++.h>using namespace std;int x;string s;string f(){//[ ] 中的第一个字母是是数字 int c=s[x]-'0'; x++; if(s[x]>='0'&&s[x]<='9') { c=c*10; c=c+s[x]-'0'; x++; } string ans; for(;x原创 2020-09-09 14:27:22 · 471 阅读 · 0 评论 -
洛谷:P1028 数的计算(回溯,递推)
题目:分析:简单题。代码:#include<bits/stdc++.h>using namespace std;long long A[1005];long long f(int m){ if(A[m]!=-1) return A[m]; A[m]=1; for(int i=1;i<=m/2;i++) { A[m]+=f(i); } return A[m];}int main(){ int m; cin>>m; memset(A,-1原创 2020-09-09 11:40:18 · 134 阅读 · 0 评论 -
洛谷:P1259 黑白棋子的移动(普及/提高-,回溯,递归)
题目:分析:既然给出了移动过程,那么题目就简单了。就是回溯啊。代码:#include<bits/stdc++.h>using namespace std;string s;int m;void init(){ string s1(m,'o'); string s2(m,'*'); s=s1+s2; s+='-';s+='-';} void f(int x1,int x2,int y1,int y2){//x1是o的最后一个 x2是*的第一个 y1,y2是_所在原创 2020-09-08 21:40:22 · 268 阅读 · 0 评论 -
洛谷:P2660 zzc 种田(数学,递归)
题目:分析:我想的是每次拆去最大的正方形。看题解也没证明。代码:#include<bits/stdc++.h>using namespace std;long long f(long long x,long long y){ //x大 y 小 if(x<y) swap(x,y); if(x==y) return 4*x; if(x%y==0) return x/y*y*4; return x/y*y*4+f(x%y,y);}int main(){ lon原创 2020-08-29 22:25:54 · 334 阅读 · 0 评论 -
洛谷:P2404 自然数的拆分问题(普及-,回溯搜素)
题目:分析:虽然是一道很基本的算法题,但是为什么放到精华呢?因为自己之前的搜索大部分都是进行bool返回判断。但是最近做的几道题都不是这样,没有返回值。代码:#include<bits/stdc++.h>using namespace std;int m;void f(int rest,int num,vector<int> v){ if(rest==0) { if(v.size()==1) return; cout<<v[0]; f原创 2020-08-24 16:41:26 · 175 阅读 · 0 评论 -
leetcode:面试题51. 数组中的逆序对(归并,回溯)
题目:分析:课上讲过,归并算法思路。代码:int all=0;void mergesort(vector<int> &n,i,j){ if(i==j) { return; } if(i+1==j){ if(n[i]>n[j]) { all++; int c=n[i];n[i]=n[j];n[j]=c; } return...原创 2020-04-24 10:20:33 · 175 阅读 · 0 评论 -
leetcode:79. 单词搜索(回溯)
题目:分析:还是强调,回溯数组判断范围条件放开头最简单,亦可以理解为下一轮再判断。最一般回溯代码–超时:int f(string s,int i,vector<vector<char> > v,vector<vector<char> > b,int x,int y){ //已经到了终点 if(i==s.size()) return ...原创 2020-04-09 17:57:05 · 199 阅读 · 0 评论 -
leetcode:89. 格雷编码(回溯)
题目:分析:大佬太优秀了。给个这个图。–大佬还给这个方法起了个名。。。。。。镜面反射法。。。。。。被彻底折服。代码:代码是自己想的,没用2,10进制转化。int main(){ vector<int> vv; int n=2; vv.push_back(0); if(!n) { return vv; } for(int i=0;i<n;i++)...原创 2020-02-20 23:00:49 · 286 阅读 · 0 评论 -
leetcode:93. 复原IP地址(回溯)
题目:分析:你还没学计网的话,说明一下IP格式。4个不大于255的数组成。代码:vector<string> vs;void f(string s,int c,int n,string ss){//原字符串 到哪个位置了 几个字符串了 当前的字符串 if(n==4) { if(c!=s.length()) return; cout<<...原创 2020-02-20 22:02:00 · 109 阅读 · 0 评论 -
leetcode:131. 分割回文串(回溯)
题目:代码:忘了存,从leetcode上cp的,凑活看吧。class Solution {public:bool judge(string ss){ if(ss.length()==1) return 1; for(int i=0;i<ss.length();i++) { if(ss[i]!=ss[ss.length()-1-i]) ...原创 2020-02-20 21:41:32 · 105 阅读 · 0 评论 -
leetcode:216. 组合总和 III(回溯)
题目:分析:。。。代码:vector<vector<int> > vv;void f(int c,int sum,vector<int> v,int k){//到c了 要sum cout<<"---"<<sum<<endl; for(int i=0;i<v.size();i++) cout&...原创 2020-02-20 19:05:43 · 124 阅读 · 0 评论 -
leetcode:77. 组合(回溯)
题目:分析:要设两个记录到哪了。代码:using namespace std;vector<vector<int> > vv;void f(int nums,int c1,int c2,int k,vector<int> v){ if(c2==k){ vv.push_back(v); return; } cout<<nu...原创 2020-02-20 15:46:01 · 90 阅读 · 0 评论 -
leetcode:40. 组合总和 II(回溯)
题目:分析:dp思路,只是不记录状态了。代码:原创 2020-02-20 14:45:41 · 134 阅读 · 0 评论 -
leetcode:22. 括号生成(回溯)
题目:分析:窃取题解的答案。nb,其实自己就差一丢丢就想到了。括号怎么搞,无非是在已有的中间添加,在已有的后面添加。任何形式: (?)+?代码:java和python如此简单的代码让我c++羞愧难当。代码:#include<bits/stdc++.h> using namespace std;vector<string> f(int c){ ...原创 2020-02-20 14:12:17 · 174 阅读 · 0 评论 -
leetcode:17. 电话号码的字母组合(回溯)
题目:分析:基本题。代码:vector<string> vs;void f(string d,int c,string s){//该放d的第几个了 if(c==d.size()) { vs.push_back(s); return; } if(d[c]=='2') { s[c]='a'; f(d,c+1,s); s[c]='b'; f(...原创 2020-02-19 22:35:25 · 93 阅读 · 0 评论 -
leetcode:60. 第k个排列(回溯)
题目:分析:还是根据排列组合基本问题全排列 II中给的两种方法改编。代码1(朴素直接修改原来的模板):原创 2020-02-19 21:50:46 · 154 阅读 · 0 评论 -
leetcode:1079. 活字印刷(回溯)
题目:分析:给出统计数字全排列的代码void f(vector<int> nums,vector<int> n,int c){//该往c位置放了 if(c==n.size()){ all++; return; } int last=-1<<30; for(int i=0;i<nums.size();i++) { if(n[...原创 2020-02-19 17:21:46 · 220 阅读 · 0 评论 -
leetcode:47. 全排列 II(回溯)------最基本的总数多少或各个解是什么-----很多题稍作改编即可
题目:分析:方法1:下一个全排列函数:next_permutation方法2:高中数学组合排列公式,A所有再除以重复的A。方法3:纯编程。关键是如何判断重复呢?瞄了一眼题解,是的,将数字排好顺序再选择,对每个位置放数的做法是,这次放的和上次放的不一样。方法三代码如下:代码1----只要数目的话:int all=0;void f(vector<int> nums,...原创 2020-02-19 16:36:20 · 142 阅读 · 0 评论 -
leetcode:526. 优美的排列(回溯)
题目:分析:普通的枚举递归,个人感觉没法剪枝。代码:int all=0;void f(int num,int n,vector<int> v){//该第n个位置了 if(n>num) { all++; return; } //第n个位置可以放几 for(int i=1;i<=num;i++) { //放过没 if(v[i]) co...原创 2020-02-19 15:37:39 · 154 阅读 · 0 评论 -
leetcode:1291. 顺次数(回溯)
题目:分析:注意看题目,必须是差1的关系。代码:for(int i=1;i<=9;i++) { int num=i; for(int j=i+1;j<=9;j++) { num=num*10+j; if(num>=low&&num<=high) { v.push_back(num); break; ...原创 2020-02-13 20:12:31 · 182 阅读 · 0 评论 -
leetcode:46. 全排列(回溯)
题目:分析:1.直接使用c++的全排列函数。next_permutation2.回溯法分析:遍历位置。用一个数组表示是否放过。回溯法 代码:vector<vector<int> > vv;void f(vector<int> nums,vector<int> n,int c,vector<int> v){//向第c个位...原创 2020-02-13 13:22:50 · 109 阅读 · 0 评论 -
leetcode:39. 组合总和(回溯)
题目:分析:因为返回的不是总数目,而是具体的情况,因此不适合使用dp。dp,其实也是暴力枚举,但是因为有记录状态,可以省去已经求过的一些。代码:vector<vector<int> > vv;int size;void f(vector<int> v,int tar,int c,vector<int> n){ cout<&l...原创 2020-02-13 11:39:48 · 172 阅读 · 0 评论 -
leetcode:784. 字母大小写全排列(回溯)
题目:分析:第一道开涮的回溯分析题目,刚开始想的还有些不明白,不过借助一颗二叉树来想,真是妙极了。左,代表换,右,代表不换,第几层,表示第几个字符。都在最后输出即可。代码:vector<string> v;void f(string s,int c){//该第c个位置了 if(s.length()==c) { v.push_back(s); return ...原创 2020-02-13 09:03:37 · 467 阅读 · 0 评论