刚看了论坛上有个很有意思的递归算法题,忍不住自己也动手来写写看。
比如给定一个字符串 “123”, 求出用1,2,3能排列出来的所有组合。
/**
* 1.对于每个需要需要获取排列集合的字符串,先获取最左边第一个字符c,然后获取右边字符串所有排列的集合
* 2.然后对每一个排列集合中的字符串,进行c的插入,从左到右,一共可以插入(长度+1)次,获得(长度+1)新字符串
* 3.递归调用的最底层,input字符串只有一个字符的时候,返回只有这个字符的排列集合
* @param input
* @return
*/
public static List<String> getStringSorts(String input){
List<String> allSortedList=new ArrayList<String>();
char leftChar=input.charAt(0);
if(input.length()>1){
String rightString=input.substring(1,input.length());
List<String> rightStringSortedList=getStringSorts(rightString);
for(String rightStringTmp:rightStringSortedList){
for(int i=0;i<rightStringTmp.length()+1;i++){
allSortedList.add(new StringBuffer(rightStringTmp).insert(i, leftChar).toString());
}
}
}else{
allSortedList.add(String.valueOf(leftChar));
}
return allSortedList;
}
写代码验证:将结果放到一个Set里面,然后再比较List和Set的长度
List<String> list=getStringSorts("12345");
Set<String> validateSet=new HashSet<String>();
for(String tmp:list){
System.out.println(tmp);
validateSet.add(tmp);
}
System.out.println("total: "+list.size());
System.out.println("validate: "+validateSet.size());
分享到:
相关推荐
在计算机科学中,生成字符串的所有排列组合是一项基础但重要的任务,通常用于密码学、组合优化问题以及各种搜索算法中。对于长度为n的字符串,其所有可能的排列组合数量是n!(n的阶乘),这是因为每个位置都可以独立...
通过这个函数,我们可以轻松地获取给定字符串的所有“组二”和“组三”组合,这对于彩票系统的中奖注数统计等场景非常有用。 需要注意的是,随着字符串长度和组合长度的增加,生成的组合数量会迅速增长,可能导致...
在编程领域,字符串排列组合是一个常见的算法问题,它涉及到如何生成一个字符串的所有可能的排列方式。这个主题主要与计算机科学的算法设计和技术有关,尤其是在数据结构和算法分析的课程中经常遇到。本节将深入探讨...
在Java中,我们可以创建一个字符数组来存储原始字符串的每个数字,然后使用各种排序算法(如冒泡排序、快速排序或内置的Arrays.sort()方法)对数组进行排序。排序完成后,将排序后的数组转换回字符串,即可得到重新...
在编程领域,字符串排列是一个经典的算法问题,主要涉及到字符串处理和递归技术。字符串的所有排列是指将一个字符串中的字符按照不同的顺序重新组合,形成所有可能的字符串。这个问题通常用于考察程序员对递归的理解...
在C++编程中,字符串的排列是一个经典的算法问题,它涉及到字符串处理和组合数学的知识。字符串的排列是指从给定的字符集合中选取字符,并按照不同的顺序排列它们,生成所有可能的不同序列。在这个问题中,我们需要...
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...
在C#编程中,查找字符串的所有排列组合是一个常见的任务,特别是在处理数据排序、组合优化或者密码学等领域。这里我们将深入探讨如何使用C#实现这一功能,主要基于递归算法。 首先,我们需要理解“排列组合”的概念...
在C语言中,实现输入一个字符串并打印出其所有字符排列的方法涉及到经典的排列组合问题,通常采用递归的方式来解决。这种算法称为全排列(Permutation)算法,它能生成一个集合的所有可能排列。这里我们将详细讲解...
它有四个参数:原字符串`str`,字符串长度`length`,当前处理的字符索引`index`,以及正在构建的排列字符串`out`。当`index`等于`length`时,意味着所有字符都已处理,此时将`out`添加到结果向量`res`中。 接下来,...
在实际开发中,字符串排列组合问题是非常常见的,例如输入一个字符串,要求输出该字符串中所有可能的排列组合。在本文中,我们将详细介绍 Java 实现字符串排列组合问题的解决方案。 字符串排列组合问题 字符串排列...
这个VB程序的主要目的是生成给定字符串的所有可能排列组合,并在RichTextBox1中显示结果。它通过递归地拆分字符串并重新组合来实现这一目标,同时提供了一个用户界面供用户输入字符串并查看执行进度。
字符串的全排列和组合算法是计算机科学中的一种基础算法,主要应用于数据处理和问题求解。在本文档中,我们将探讨如何使用C++实现字符串的全排列算法,并讨论如何处理包含重复字符的情况。 首先,全排列是指从一个...
3. **字符串全排列**:是指将字符串中的所有字符进行所有可能的排列组合。例如,字符串"abc"的所有全排列为"abc", "acb", "bac", "bca", "cab", "cba"。全排列通常采用递归或回溯法解决。 4. **KMP算法**:是一种...
标题中的“python编程题:字符串的(所有可能的)排列组合”是一道关于Python编程的题目,要求通过编程实现一个功能,即给定一个字符串,找出由这些字符组成的所有可能的排列组合。这个题目旨在考察对字符串操作以及...
2. **字符串全排列**:对于给定的字符串,找出所有可能的字符排列。这个问题可以使用回溯算法来解决,遍历所有可能的子树,每到达叶子节点就输出一个排列,遇到重复则回溯。 3. **下一个排列**:给定一个排列,找到...
通过定义临时字符串临时存储和交换数据,实现了数组中字符串的重新排列。这种方法是排序算法中常见的技巧。 7. 算法思想:虽然程序中的排序算法实现可能并不高效,但其体现了基本的算法思想,即通过比较和交换元素...
全排列是指从给定的字符数组中,按照一定的顺序生成所有可能的排列组合。这个问题通常使用回溯法来解决,因为它能够有效地避免重复的排列。下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要...
整个算法的核心在于`dfs`函数,它利用递归的方式构建所有可能的字符串排列。由于每次构造新字符串时,都会检查已使用的字符并进行回溯,所以不会产生重复的排列。在`permutation`函数中,我们先使用`dfs`得到所有...