Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合

今天遇到的笔试题,时间紧张没有想出来。笔试完后总结一下解决方法。

题目如下:

给出一个字符串例如:”abc“,输出组成该字符的字母组成的所有组合。上例:a,b,c,ab,ac,bc,abc;

以abcde为例来解释,abc的组合的元素个数从1-5个;

分别为a b c d e ab ac ad ae bc bd be cd ce abc abd abe acd ace ade bcd bce bde cde;

对于有多个元素的子元素,每次都是移动后边的元素,比如,abc,abd, abe 直到元素不能移动为止,然后移动前一个相邻的,acd ace ,继续ade,第二个元素也到达最后,开始移动第一个,bcd bce bde。

总之每次后边元素的移动都是从前一个元素的下一个元素开始。移动到不能移动为止(str.length - n + index)

(不能移动的位置为:字符总长度减去子元素长度,加上第一个此类子元素开始位置,例如子元素长度为3,第一个子元素为abc,那么b的结束为止为5-3+1,1位b的下标);

然后用回溯法实现

public class LetterCombineTest {
public static int count = 0;
public static void main(String[] args) {
String str = "abcdefg";
new LetterCombineTest().printLetterCombine(str);
System.out.println();
System.out.println(count);

}
public void printLetterCombine(String str){
int n = str.length();
for(int i = 1;  i <= n; i ++){
char [] s = new char[i];
getLetterCombine(s,0,0,i,str);
}
}
public void getLetterCombine(char []s, int index, int starti, int n, String str){
int length = str.length();
for(int i = starti; i <= length - n + index; i ++){
s[index] = str.charAt(i);

if(index == n - 1){
for(int j = 0 ; j < n; j++){
System.out.print(s[j]);
}
System.out.print(" ");
count++;
continue;
}
getLetterCombine(s,index + 1, i+1, n,str);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值