JAVA全排列算法

利用java知识编写全排列算法,里面有我的个人理解注释


代码如下:

package demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@SuppressWarnings("unchecked")
public class 全排列
{
    public static void main(String[] args)
    {
        //定义一个String的数组,用于存储abcd四个字符
        String s[]={"a","b","c","d"};
        /*进行迭代操作
          @Arrays.asList(s)  将String[]数组转换为List集合
          @New ArrayList()   创建一个List集合,用于接收每次迭代出来的字符,保存在List集合
        */
        sort(Arrays.asList(s), new ArrayList());
    }
    
    //定义一个数字NUM,用于迭代出的数据的长度,
    //例:NUM=3  
    //输出:abc abd bac bad
    private static int NUM=4;
    
    //进行全排序
    /*
     * @datas 存储数据{a,b,c,d}
     * @target 允许接收数据最大的长度为NUM  
     */
    public static void sort(List datas,List target){
        //@1.当taret的长度为NUM时表示已将达到输出的条件,进行输出
        if(target.size()==NUM){
            //迭代数据,保存为Object数据类型
            for(Object o:target){
                System.out.print(o);
            }
            //换行
            System.out.println("");
            //返回
            return;
        }
        
        //@2.当traget的长度达不到NUM的值时,将数据保存在target集合中
        /**
         * @newtarget  重新创建一个target集合,接收target中的数据(代表一种数据输出完后,重新开始新的迭代)
         * @newdatas   接收datas中的数据,迭代datas中的数据
         */
        for(int i=0;i<datas.size();i++){
            //创建newDatas集合,用于接收datas中的数据
            List newDatas=new ArrayList(datas);
            //创建newTarget集合,用于接收target中的数据
            List newTarget=new ArrayList(target);
            //target集合冲datas中一条条的去取数据
            newTarget.add(datas.get(i));
            //datas则相应的减少一条数据
            newDatas.remove(i);
            //然后进行递归,判断是否满足输出条件,进行输出
            sort(newDatas, newTarget);
        }
    }
}



文章转载于:http://blog.csdn.net/sunyujia/article/details/4124011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值