Java面试题:输出字符串的所有组合
2017-08-21 14:51
330 查看
问题描述:假设字符串中所有的字符都不重复,输出字符串中的所有组合!
public class StringTestDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="abc";
char[] c=s.toCharArray();
// StringBuffer sb=new StringBuffer("");
// int len=c.length;
// for (int i = 0; i <= len; i++) {
// CombineRecursiveImpl(c,0,i,sb);
// }
Combine(c);
}
private static void CombineRecursiveImpl(char[] c, int begin, int len,
StringBuffer sb) {
// TODO Auto-generated method stub
if(len==0){
System.out.println(sb+" ");
return;
}
if(begin==c.length){
return;
}
sb.append(c[begin]);
CombineRecursiveImpl(c,begin+1,len-1,sb);
sb.deleteCharAt(sb.length()-1);
CombineRecursiveImpl(c,begin+1,len,sb);
}
public static void Combine(char[] c){
if(c==null){
return;
}
int len=c.length;
boolean used[]=new boolean[len];
char cache[]=new char[len];
int result=len;
while(true){
int index=0;
while(used[index]){
used[index]=false;
++result;
if(++index==len){
return;
}
}
used[index]=true;
cache[--result]=c[index];
System.out.println(new String(cache).substring(result)+" ");
}
}
}
public class StringTestDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="abc";
char[] c=s.toCharArray();
// StringBuffer sb=new StringBuffer("");
// int len=c.length;
// for (int i = 0; i <= len; i++) {
// CombineRecursiveImpl(c,0,i,sb);
// }
Combine(c);
}
private static void CombineRecursiveImpl(char[] c, int begin, int len,
StringBuffer sb) {
// TODO Auto-generated method stub
if(len==0){
System.out.println(sb+" ");
return;
}
if(begin==c.length){
return;
}
sb.append(c[begin]);
CombineRecursiveImpl(c,begin+1,len-1,sb);
sb.deleteCharAt(sb.length()-1);
CombineRecursiveImpl(c,begin+1,len,sb);
}
public static void Combine(char[] c){
if(c==null){
return;
}
int len=c.length;
boolean used[]=new boolean[len];
char cache[]=new char[len];
int result=len;
while(true){
int index=0;
while(used[index]){
used[index]=false;
++result;
if(++index==len){
return;
}
}
used[index]=true;
cache[--result]=c[index];
System.out.println(new String(cache).substring(result)+" ");
}
}
}
相关文章推荐
- JAVA 输出指定字符串所有排列组合
- 输出字符串的所有组合的java实现
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合
- 【Java笔试题】输出字符串的所有组合
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合(二)
- 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
- 输出字符串的所有全排列(递归法和非递归,非递归采用组合数学的字典序)
- 递归的应用,输出字符串的所有排列(java)
- 输出字符串的所有排列组合情况
- java面试题的字符串逆序输出
- 面试题:输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 数据结构基础(11)------------输出字符串的所有组合( Permutation)--腾讯笔试附加题
- 输出1到N之间所有相加等于M的数字组合(背包问题)求相加为M的所有组合--微软酷派经典面试题
- 算法1(输出字符串的所有组合形式,例如 string s="abc" 输出所有形式 a,b,c,ab,bc,abc 可以与顺序无关)
- java输出字符串的所有排列
- 输出该字符串中字符的所有组合
- 【每日面试题】输入一字符串,输出该字符串的所有组合
- 用户输入字符串,输出所有排列 java
- 字符串的所有可能组合输出
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)