字符串的排列
来源:互联网 发布:无间道为什么经典 知乎 编辑:程序博客网 时间:2024/05/29 17:30
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
Idea
看到别人用的好的方法放到这里,共勉
Code
1.回溯法
import java.util.*;public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> res = new ArrayList<String>(); if(str==null||str.length()==0){ return res; } HashSet<String> set=new HashSet<String>(); fun(set,str.toCharArray(),0); res.addAll(set); Collections.sort(res); return res; } private static void fun(HashSet<String> set,char[] str,int k){ if(k==str.length){ set.add(new String(str)); return; } for(int i=k;i<str.length;i++){ swap(str,i,k); fun(set,str,k+1); swap(str,i,k); } } private static void swap(char[] str,int i,int j){ char tmp=str[i]; str[i]=str[j]; str[j]=tmp; }}
2.dfs
import java.util.*; public class Solution { private char[] seqs; private Integer[] book; private HashSet<String> result=new HashSet<String>(); public ArrayList<String> Permutation(String str){ ArrayList<String> arrange=new ArrayList<String>(); if(str==null||str.isEmpty()) return arrange; char[] strs=str.toCharArray(); seqs=new char[strs.length]; book=new Integer[strs.length]; for(int i=0;i<book.length;i++){ book[i]=0; } dfs(strs,0); arrange.addAll(result); Collections.sort(arrange); return arrange; } private void dfs(char[] arrs,int step){ //走完所有可能 记录排列 if(arrs.length==step){ String str=""; for (int i=0;i<seqs.length;i++){ str+=seqs[i]; } result.add(str); return; //返回上一步 } //遍历整个序列,尝试每一种可能 for (int i=0; i<arrs.length;i++){ //是否走过 if(book[i]==0){ seqs[step]=arrs[i]; book[i]=1; //下一步 dfs(arrs,step+1); //走完最后一步 后退一步 book[i]=0; } } }}
0 0
- 字符串的全排列
- 字符串的全排列
- 转载 字符串的排列
- 字符串的排列--总结
- 字符串的排列
- 字符串的全排列
- 字符串的排列
- 53.字符串的排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的排列
- 字符串的排列
- 字符串的排列
- 字符串的倒序排列
- 字符串的全排列
- 字符串的排列
- 2017年计划
- Levenberg-Marquardt算法浅谈
- 加载器
- BZOJ 1251 Splay维护序列
- Android——JavaWeb servlet通信
- 字符串的排列
- 《IllegalStateException异常》
- github的基本用法:克隆,上传,查看,删除,分支
- 写论文,复习
- redis 不写磁盘
- 分享一下jqgrid合并单元格
- Idea-2016旅行在四川
- redis 数据类型详解 以及 redis适用场景场合
- React Native实战项目企业通信录(含视频教程)- 登录功能实现