abc的组合

  • Post author:
  • Post category:其他


思路:组合这个词近似等价于遍历。这类组合要有两个循环,大条件是什么时候结束所有组合,小条件是什么时候结束一种组合。


//是否要clear()? 因为在循环开始的地方是在内部new al2,所以每次都是新的空的集合。


如果在外部new 那么就要clear

package com.hard;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Scanner;

/*输出一个字符数组中的所有字符的所有组合。比如有字符集str={A,B,C}

应输出:A B C AB AC BA BC CA CB ABC ACB BAC BCA CAB CBA

*/

public class CombinationChar {

@SuppressWarnings(“resource”)

public static void main(String[] args) throws IOException {

String s = new Scanner(System.in).nextLine();

String[] sa = new String[s.length()];

ArrayList<String> al = new ArrayList<String>(); //新建al集合

for (int i = 0; i < sa.length; i++) {

String str = String.valueOf(s.charAt(i));

sa[i]=str;

al.add(str);

}

//集合中最后一个元素的长度不是数组的长度

while (al.get(al.size() – 1).length() != sa.length)

{

//新建一个al2

ArrayList<String> al2 = new ArrayList<String>();

//遍历数组sa

for (int i = 0; i < sa.length; i++)

{

//遍历al

for (String str : al)

//如果al中的元素没有sa数组中第i个,并且此元素长度等于al集合的最后一个元素的长度

if (!str.contains(sa[i])&& str.length() == al.get(al.size() – 1).length())

al2.add(str + sa[i]);

}

al.addAll(al2);//是否要clear()?

}

System.out.println(“共有”+al.size()+”种组合,组合为:”+al);

}

}

转载于:https://my.oschina.net/zuodev/blog/663265