`
laiseeme
  • 浏览: 124759 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

发一个全排列算法

阅读更多
发一个全排列算法,面试时可能会用到,输入一个字符串,返回所有的排列
增加了指定几个数字不能相邻的功能,但是觉得实现不是太好,大家有何高见
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);

		}

分享到:
评论

相关推荐

    全排列算法C语言超简洁

    自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,

    全排列算法解析(完整版)

    全排列是计算机科学和数学中的一个重要概念,指的是从n个不同元素中取出m(m≤n)个元素的所有可能的排序。全排列的数量可以通过排列数公式n!(n的阶乘)来计算。全排列算法广泛应用于程序设计中,尤其是在需要穷举...

    全排列算法部分算法需要自己优化修改

    全排列算法是计算机科学中一个基础且重要的问题,它涉及到数组或序列的所有可能的线性排列方式。在处理这个问题时,我们通常会采用递归或迭代的方式来实现。下面将详细介绍全排列算法及其优化方法。 全排列算法的...

    全排列算法 实例 一种实现了n个数全排列的算法

    全排列算法是计算机科学中一个基础且重要的概念,主要用于生成一组数据的所有可能的排列组合。在实际应用中,它常用于解决各种优化问题、搜索问题和组合数学问题。本实例将详细阐述一种实现n个数全排列的算法。 ...

    彻底理解全排列算法

    全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。

    全排列算法

    全排列算法

    全排列算法解析(完整版)

    ### 全排列算法解析 #### 1. 全排列的定义和公式 全排列是指从一个包含`n`个不同元素的集合中选取全部`n`个元素,并按一定顺序排列形成的不同序列总数。数学上,`n`个不同元素的全排列数记为`n!`(`n`的阶乘),即...

    全排列算法 全排列算法 (c#版)

    全排列算法是计算机科学中一个基础且重要的概念,特别是在算法设计和分析中。它涉及到将一个给定的有限序列的所有可能的元素排列情况进行列举。在C#编程语言中,实现全排列算法可以帮助开发者解决多种问题,例如组合...

    组合数学全排列算法(转)

    全排列算法是组合数学中的一个重要概念,在计算机科学中有广泛的应用,例如在密码学、生物信息学以及各种算法设计中都有涉及。 #### 排列算法分类 在组合数学中,常见的全排列算法有以下几种: 1. **递归算法** -...

    全排列算法实现(java\c#\c++,各种主流语言版本)

    全排列算法是计算机科学中的一种基础算法,它用于找出给定集合的所有可能的排列组合。在本例中,我们将讨论如何使用递归方法实现全排列,以Java、C#、C++等主流编程语言为例。 全排列算法的核心思想是通过递归地...

    C语言实现的全排列算法

    全排列算法是计算机科学中一个基础且重要的概念,特别是在算法设计和组合数学中。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列的所有可能的组合方式。在本例中,我们讨论的是使用C语言实现的全排列...

    全排列算法实现(C)

    实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响

    利用中介数实现全排列算法

    利用中介数实现全排列算法,采用java实现。

    objective-c数组全排列算法

    以下是一个简单的Objective-C代码示例,实现了全排列算法: ```objc #import @interface ArrayPermutation : NSObject // 主函数,接收原始数组,返回全排列结果 + (NSArray *)fullPermutations:(NSArray *)...

    组合数学全排列算法

    实现了字典序法、递增进位制数法、递减进位制数法、邻位对换法四种全排列算法。全排列算法有很多种,这里只是其中的一些,可以调试运行比较一下各种算法的效率。(该代码为初级版本,注重算法的实现,在交互方面需要...

    c#全排列的算法

    C#全排列算法 在计算机科学中,全排列是指对一个集合中的所有元素进行排列的操作。全排列算法是一种常用的算法,用于生成所有可能的排列方式。在C#中,可以使用递归或迭代的方式来实现全排列算法。 在给定的代码中...

    一种计算全排列的简易算法

    文件名“c_N_array.doc”可能是一个文档,详细解释了这个C语言实现的全排列算法。其中可能包含了代码示例,讲解了如何使用数组来存储和生成全排列,也可能讨论了算法的时间复杂度和空间复杂度。 另一份文件“c4.txt...

    全排列算法设计分析.ppt

    全排列算法设计分析主要关注如何生成一个序列中所有可能的不同排列。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来,所有可能的排列方式组成的集合。这里我们将通过递归和迭代的方式来解析这个过程...

    全排列以及相关算法

    在程序设计过程中,我们往往要对一个序列进行全排列或者对每一个排列进行分析。全排列算法便是用于产生全排列或者逐个构造全排列的方法。当然,全排列算法不仅仅止于全排列,对于普通的排列,或者组合的问题,也可以...

    排列组合的全排列算法(交换算法)

    全排列算法是计算机科学中处理数组或集合的一种经典方法,主要应用于组合数学和算法设计领域。在本场景中,我们关注的是"交换算法",它用于生成一个给定数组的所有可能排列。全排列是指从n个不同元素中取出m个元素...

Global site tag (gtag.js) - Google Analytics