`
zenghuiss
  • 浏览: 26039 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

列出给定字符串所有的排列组合

阅读更多
问题:
给出一个字符串,列出所有字符的组合。
例如,xyz 所有排列组合的结果为:xyz,xzy,yxz,yzx,zxy,zyx.

逻辑分析:
先从第一个字符起,我们列出后面每个字符可能出现的组合,然后第二个字符,列出其所有可能的组合...依次往后递推,n个字符的组合数为n!.

代码实现:
	StringBuilder out = new StringBuilder();
	String in = "xyz";
	boolean [] used = new boolean[in.length()];
	public  void permutationString(){
		if(out.length() == in.length()){
			System.out.println(out.toString());
			return;
		}
		for(int i=0; i < in.length(); i++) {
			if(used[i]) continue;
			out.append(in.charAt(i));
			used[i] = true;
			permutationString();
			used[i] = false;
			out.setLength(out.length() - 1);
		}
	}

代码分析:
因为在每种组合中字符串的每个字符只能出现一次,所以我们用一个boolean的数组来标识某个字符是否已经被添加到out过。
我们用一个StringBuilder的out来打印满足要求的的组合。

如果out长度和给定字符串的长度相等,说明我们已经得到一种排列组合,把它打印出来,然后return;

否则,
对字符串所有的字符进行循环,如果当前字符已经被添加过,则跳过这个字符,否则,把字符添加到out里,同时标记它已经被添加,接着通过递归得到以其作为开头的所有字符串的组合,之后我们标记此字符已经处理结束(used[i] = false),继续处理下一个位置的字符,直到将整个字符串都处理完毕。
分享到:
评论

相关推荐

    列出字符串的全部排列组合

    从给定的代码片段来看,该程序旨在生成一个字符串的所有可能排列组合,但代码实现上存在一些问题,例如,函数命名、逻辑结构以及对内存管理的处理方式等,都偏离了标准的C语言编程实践。下面,我们将深入解析标题、...

    java代码-列出所有字符串中大小写的组合

    在Java编程语言中,列出一个字符串的所有大小写组合是一个常见的任务,特别是在进行字符串处理或算法练习时。这个任务可以通过递归或循环等方法实现。以下是一个详细的解释: 首先,我们需要理解问题的核心:对于一...

    从n个数组中取出所有排列组合(Java实现)

    这个问题的主要目标是从给定的n个数组中找出所有的可能排列组合。Java作为一种强大的编程语言,提供了丰富的工具和方法来解决此类问题。下面我们将深入探讨这个问题的解决方案、相关算法以及Java中的实现细节。 ...

    字符串的全排列和组合算法.doc

    在字符串上下文中,这通常涉及将字符串中的每个字符视为一个元素,并列出所有可能的字符顺序。例如,字符串"abc"的全排列包括"abc", "acb", "bac", "bca", "cab", 和 "cba"。 递归是一种解决全排列问题的有效方法。...

    JavaScript实现在数组中查找不同顺序排列的字符串

    本篇文章将介绍两种方法来实现这个功能,具体针对以下需求:从给定的字符串数组中找出所有字符顺序不同的字符串组合。 首先,我们来看第一种方法: ```javascript var stringClassify = function(arr) { var ...

    WordRanker:按字母顺序排列字符串

    WordRanker 的任务就是确定给定字符串的排列在所有这些排列中的位置。 在实现上,WordRanker 可能会采用以下步骤: 1. **预处理**:首先,程序会接收用户通过命令行传递的单词作为输入。考虑到 Java 中的 String ...

    LeetCode判断字符串是否循环-Leetcode:力码

    给定两个字符串,求串a中的每个字符是否可以在串b中找到对应的字符,串b中的每个字符只可以使用一次,但是字符可以重复出现。 2017年4月14日 349 求两个数组的交集,不允许出现重复的数字。 404 求左子树节点之和。 ...

    8594有重复元素的排列问题

    题目要求实现一个程序来计算并输出给定字符序列中所有不同的排列情况,其中可能包含重复的元素。 #### 代码解析 首先,我们来看一下提供的代码实现: ```cpp #include int sum = 0; using namespace std; ...

    关于各种排列组合java算法实现方法

    `count2` 方法则是将整数转换为九进制字符串,再进行排序和比较,以避免重复的排列。 虽然这种方法直观易懂,但由于需要遍历所有可能的二进制状态,其时间复杂度较高,不适合处理大数据量的排列组合问题。 接下来...

    Linux_C函数库参考手册_目录

    - **strfry(随机打乱字符串)**:将字符串中的字符随机排列。 - **strlen(获取字符串长度)**:计算字符串的长度(不包括结束符'\0')。 - **strncasecmp(忽略大小写比较字符串)**:比较两个字符串,忽略大小写差异,...

    范围上尝试模型1

    4. **字符串排列**:打印一个字符串的所有排列,要求是全排列,即所有字符的组合,不允许重复。 5. **无重复排列**:类似地,要求排列中不包含重复的排列。 对于动态规划问题,通常采用自底向上的方法,通过构建一...

    整理的java工具类

    1. **全排列(Permutation)**:对于一个给定的n个不同元素,全排列是列出所有可能的n!种顺序。 2. **组合(Combination)**:在n个不同元素中选择k个元素,不考虑顺序,其数量为C(n,k) = n! / [k!(n-k)!]。 3. **...

    labuladong的刷题笔记V1.31

    回溯算法可以用于生成所有可能的字符串组合。 2. **括号生成**:此问题涉及到生成所有有效的括号序列,如计算表达式的括号匹配。使用回溯算法可以确保生成的所有序列都满足括号的正确配对规则。 3. **解数独**:...

    计算机二级考试C语言操作题题库.pdf

    2. **字符串排序**:字符串处理是C语言的基础,题目要求对长度为7个字符的字符串进行排序,除了首尾字符,其余字符按照ASCII码降序排列。这可以通过两层循环实现,内层循环用于比较和交换字符。 3. **字符串过滤**...

    计算机C语言二级练手100题

    21. 字符串内部字符降序排列:对于长度为7的字符串,除首尾字符外,其余字符按ASCII码降序排列。使用排序算法,如冒泡或快速排序。 22. 第22题未给出具体内容,但可以假设是另一个编程题目,可能涉及字符串操作或...

    计算机国二C语言等级考试题库内部资料程序编辑.pdf

    以上就是从给定文件内容中提炼出的C语言编程相关知识点,包括结构体操作、数组处理、字符串处理、字符转换、数值计算、位运算以及排序算法等。这些知识点是C语言学习中的核心部分,对于准备计算机等级考试或提升编程...

    Python查找相似单词的方法

    Python查找相似单词的方法,涉及了利用Python的字符串操作技巧,尤其是针对单词排列组合的处理。这种方法可以帮助我们找到与给定单词在字母顺序上相似的其他单词,即兄弟单词。所谓兄弟单词,指的是通过重新排列单词...

    permute-python用法.docx

    2. **解决问题**:在数学问题中,比如解决排列问题,`permutations` 可以帮助你快速列出所有可能的解。 3. **数据分析**:在处理数据排序和组合分析时,`permutations` 可以帮助探索不同顺序对结果的影响。 4. **...

    LeetCode答案大全

    6. ZigZag Conversion:将字符串按Z字形排列,输出按行读取的字符串。这个问题可以通过模拟Z字形的方式来解决,也可以通过数学的方式确定每个字符应该处于哪一个行。 7. Reverse Integer:这题要求将一个整数反转,...

    _leetcode-python.pdf

    - Minimum Window Substring: 给定两个字符串s和t,找出s中包含t所有字母的最小子串。 - Remove Duplicates from Sorted Array II: 删除排序数组中的重复项,使得每个元素最多出现两次。 - Search in Rotated Sorted...

Global site tag (gtag.js) - Google Analytics