这个程序可以指定任意的数组,长度不限。- import java.util.ArrayList;
- /**
- 思路:
- 用一个集合存储得到的字符串。假设我们已经取到了所有的三个字符所组成的字符串。
- 如果要得到四个字符所组成的字符串,只需要把所有的三个字符组成的字符串和所给的字符
- 数组中的一部分字符进行“+”运行就行。
- */
- class MyTest {
- public static void main(String[] args) {
- char[] ch = {'a','b','c','d','e'};
- ArrayList<String> ts = zuHe(ch);
- for(String str:ts){
- System.out.println(str);
- }
- }
- /**
- paiLie()获取所给字符数组中元素组成的排列。和本题无关,但是后一个方法的思路来源于它。
- 例如:给的是{'a','b','c'}那么得到的就是a,b,c,ab,ac,bc,abc.
- */
- private static ArrayList<String> paiLie(char[] ch) {
- ArrayList<String> ts = new ArrayList<String>();
- for(int x = 0;x<ch.length;x++)//向集合中添加元素,这些元素就是所有的由一个字符组成的字符串。
- {
- ts.add(ch[x]+"");
- }
- int i = 1,num = ts.size(),shu = ts.size();
- /**
- shu代表每一次新添加的字符串的个数。
- 例如:由3个字符的字符串得到4个字符的字符串时,这个shu代表的就是4个字符组成的字符串的个数。
- */
- int y;//定义在这里,是为了在for循环中定义shu =0
- while(i<ch.length){
- for(y=num-shu,shu =0;y<num;y++){
- for(int x = 0;x<ch.length;x++){
- ts.add(ts.get(y)+ch[x]);
- shu++;
- }
- }
- num = ts.size();
- i++;
- }
- return ts;
- }
- /**
- 获取获取所给字符数组中元素组成的组合。
- 例如:给的是{'a','b','c','d'}那么得到的就是a,b,c,ab,ac,,ad,bc,,bd,abc,abd,acd,bcd,abcd
- */
- private static ArrayList<String> zuHe(char[] ch) {
- ArrayList<String> ts = new ArrayList<String>();
- /**
- 数组jishu是用来记录每一个字符串的最后一个字符的在字符数组中的坐标,
- 指明下一次这个字符串应该从哪个坐标开始和字符数组中的元素进行加运算。
- 例如:对于字符串”ab",它记录的是1,那么就知道“ab"下一次应该从1+1号下标
- 开始进行加运算。
- */
- int[] jishu = new int[ch.length*(ch.length-1)];
- int[] jiu = new int[ch.length*(ch.length-1)];
- int xia = 0;
- for(int x = 0;x<ch.length;x++)
- {
- ts.add(ch[x]+"");
- jishu[xia++] = x;
- }
- fu(jishu,jiu);
- int i = 1,num = ts.size(),shu = ts.size();
- int y;
- while(i<ch.length){
- int y1 = num-shu;
- for(y=num-shu,shu =0,xia =0;y<num;y++){
- /**
- y每增加一次,就代表着1个新的字符串开始进行加运算,
- */
- for(int x = jiu[y-y1]+1;x<ch.length;x++){
- ts.add(ts.get(y)+ch[x]);
- jishu[xia++]=x;//记录下标。
- shu++;
- }
- }
- num = ts.size();
- i++;
- fu(jishu,jiu);
- }
- return ts;
- }
- private static void fu(int[] jishu,int[] jiu)//赋值,但不让后者指向前者。
- {
- for(int x=0;x<jishu.length;x++){
- jiu[x]=jishu[x];
- }
- }
- }
-
复制代码 |