全配列アルゴリズムを送信します。


全配列アルゴリズムを送信します。面接時に使うかもしれません。文字列を入力して、すべての並べ替えを返します。
いくつかの数字を追加しましたが、隣の機能はできません。実現はあまり良くないと思いますが、どういったご意見がありますか?

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

/**
 *    numbers 
 * 
 * @author laiseeme
 */
public class RangeNumber
{
	private char[] numbers;   //       
	private List<String> list;//           
	private String regex;     //           
	
	/**
	 *                
	 * @param numbers
	 * @param notNear
	 */
	
	public RangeNumber(char[] numbers,char[] notNear)
	{
		this.numbers = numbers;
		StringBuilder sb = new StringBuilder();
		sb.append("\\d*");
		for(int i=0;i<notNear.length;i++)
		{
			sb.append("[");
			sb.append(String.valueOf(notNear));
			sb.append("]");
		}
		sb.append("\\d*");
		regex = sb.toString();
		System.out.println(regex);
	}
	
	public List range()
	{
		list = new ArrayList<String>();
		int m,n; 
		m = 0;
		n = numbers.length;
		permutation(m,n);
		return list;
	}
	
	/**
	 *        
	 * @param m     
	 * @param n       
	 */
	private void permutation(int m, int n)
	{
		int i;
		char t;
		if (m<n-1) 
		{ 
			permutation(m+1, n);
			for (i=m+1;i<n;i++) {
				t=numbers[m];
				numbers[m]=numbers[i];
				numbers[i]=t;
				permutation(m+1, n);
				t=numbers[m];
				numbers[m]=numbers[i];
				numbers[i]=t;
			}
		}
		else
		{
			String value = String.valueOf(numbers);
			if(!value.matches(regex))
			{
				list.add(value);
			}
		}
	}
}
隣接する文字列をフィルタする必要がない場合は、

		else
		{
			list.add(value);

		}