abc的组合

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


//是否要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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值