
public class Test 
{


     /** *//** *//** *//** *//** *//** *//** *//**
      * @param args
      */

      public static void main(String[] args) 
{
          // TODO Auto-generated method stub

          new QueenOne(new String[] 
{ "1", "2", "3", "4" }).run();  //方法一
 

        new QueenTwo(new String[] 
{ "1", "2", "3", "4" }).run();   //方法二
     }
} 
方法一:(利用数学当中的多项式合并来解决----(a+b+c)*(a+b+c)*(a+b+c) )
package org.minli;

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


public class QueenOne 
{
    private String[] num;


    public QueenOne() 
{
    }


    public QueenOne(String[] num) 
{
        this.num = num;
    }


    public void run(String[] nums) 
{
        List numsList = Arrays.asList(nums);


        for (int i = 1; i < nums.length; i++) 
{
            numsList = join(numsList, nums);
        }

        printNums(numsList);
    }


    public List join(List<String> dest, String[] src) 
{

        List tempList = new ArrayList();


        for (String str : src) 
{

            for (String temp : dest) 
{

                if (temp.indexOf(str) == -1) 
{
                    tempList.add(temp + str);
                }
            }
        }
        return tempList;
    }


    public void printNums(List<String> numsList) 
{

        for (String str : numsList) 
{
            System.out.println(str);
        }
    }
} 
方法二:(利用常规思路)  (1,2,3,4) 

package org.minli;

import java.util.*;


class NewNum 
{
    // 保存数字
    private List<String> nums = new ArrayList<String>();


    public NewNum() 
{
    }


    private NewNum(List nums) 
{
        this.nums = nums;
    }


    /** *//**
     *添加数字
     */

    public NewNum addNum(String num) 
{


        if (!checkNum(num)) 
{

            List<String> temp = new ArrayList<String>(nums);

            temp.add(num);

            return new NewNum(temp);
        }

        return null;
    }


    /** *//**
     *检查数字
     */

    public boolean checkNum(String targetNum) 
{

        for (String num : nums) 
{

            if (num.equals(targetNum)) 
{
                return true;
            }
        }
        return false;
    }


    /** *//**
     *格式化输出
     */

    public String toString() 
{
        StringBuilder temp = new StringBuilder();


        for (String num : nums) 
{
            temp.append(num + " ");
        }
        return temp.toString();
    }
}


public class QueenTwo 
{
    private String[] nums;


    public QueenTwo() 
{
    }


    public QueenTwo(String[] nums) 
{
        this.nums = nums;
    }


    /** *//**
     *组合数字
     */

    private List makeNum(List<NewNum> allNewNums, int count) 
{
        if (count == 1)
            return allNewNums;

        List<NewNum> newAllNewNums = new ArrayList<NewNum>();


        for (NewNum newNum : allNewNums) 
{


            for (String num : nums) 
{

                if (!newNum.checkNum(num)) 
{

                    NewNum temp = newNum.addNum(num);

                    newAllNewNums.add(temp);
                }
            }
        }

        return makeNum(newAllNewNums, count - 1);
    }


    /** *//**
     *打印
     */

    public void print(List<NewNum> allNewNums) 
{


        for (NewNum newNum : allNewNums) 
{
            System.out.println(newNum);
        }
    }


    public void run() 
{

        for (String num : nums) 
{

            NewNum newNum = new NewNum();

            List<NewNum> allNewNums = new ArrayList<NewNum>();
            allNewNums.add(newNum.addNum(num));

            allNewNums = makeNum(allNewNums, nums.length);

            print(allNewNums);
        }
    }

}