剑指offer 28字符串全排列
来源:互联网 发布:央企比民企好 知乎 编辑:程序博客网 时间:2024/06/10 00:25
思路1.当前字符依次与后面的字符交换形成新的排列
void permutation(char*str,char*start){ if(*(start+1)=='\0') { cout<<str<<endl; } else { for(char*p=start;*p!='\0';++p) { cswap(p,start); permutation(str,start+1); cswap(p,start); } }}
思路2.DFS,标记每个字符是否访问过,把访问的字符存起来,最后输出。
int visit[128]={0};char stackk[128]={0};void DFS(int s,int len,char*str,int top){ stackk[top++]=str[s]; if(top==len) { visit[str[s]]=0; cout<<stackk<<endl; return; } visit[str[s]]=1; for(int i=0;i<len;++i) { if(visit[str[i]]==0) { visit[str[i]]=1; DFS(i,len,str,top); } } visit[str[s]]=0;//重置访问标记位}void DFSPermut(char *str){ int len=strlen(str); int top=0; for(int i=0;i<len;++i) { for(int j=0;j<len;++j) { visit[str[j]]=0; } DFS(i,len,str,top); }}
包含重复元素的排列:按照思路1,如果当前第i个字符,存在于[start,i)说明,前面已经等价交换过一次,故不用交换。
void permutation(char*str,char*start){ if(*(start+1)=='\0') { cout<<str<<endl; } else { for(char*p=start;*p!='\0';++p) { if(IsSwap(start,p,*p)==false)continue; cswap(p,start); permutation(str,start+1); cswap(p,start); } }}
0 0
- 剑指offer 28字符串全排列
- 剑指Offer------字符串的排列(全排列)
- 剑指offer 面试题28 字符串全排列
- 《剑指offer》:[28]字符串的全排列问题
- 【面试题】剑指Offer-28-字符串的全排列
- 剑指offer面试题28 字符串的全排列
- 剑指offer:字符串的全排列
- 剑指offer 28. 字符串的全排列
- 剑指offer:字符串的排列(字符串全排列)
- 剑指offer 之 字符串的全排列、全组合
- 剑指Offer-28-字符串排列
- 剑指offer-字符串全排列(有重复值)
- 剑指offer----字符串的全排列----java实现
- 剑指offer之字符串字典序全排列
- 剑指offer 编程题(26):字符串全排列
- 剑指offer:字符串排列
- 剑指offer--字符串排列
- 剑指Offer-数组全排列
- Android沉浸式状态栏
- 2017.3.18【NOIP提高组】模拟赛B组
- 安装kibana(Linux)
- js数字递减,格式化
- 九大排序算法再总结
- 剑指offer 28字符串全排列
- 《深入理解Android 卷I》- JNI
- 欢迎使用CSDN-markdown编辑器
- JavaSE 学习参考:线程生命周期
- 分类模型的评估方法简介
- VR应用程序的教程
- 关于EditText设置单击提示音方法的探讨
- 【JAVA编程题】现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
- Navicat中使用:数据传输,出现:MySQL server has gone away错误