题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出所有可能的排列
我的想法是,先用组合的算法把所有的组合算出来,然后对每个组合进行全排列。
代码如下:
import java.util.Scanner;
/*
* 主要的思想是在组合的基础上进行全排列
*/
public class Pailie {
private static String str = "ABCDEF";// 字符串
private static int n = 3;// 选择的个数
public static void main(String[] args) {
new Pailie();
}
Pailie() {
Scanner input = new Scanner(System.in);
System.out
.println("请输入要从(" + str + ")中选择的个数(要少于" + str.length() + "个)");
n = Integer.parseInt(input.nextLine());
zuhe("", 0);
}
//组合的算法
public static void zuhe(String s, int i) {
String temp = s;// 保存上一次的字符串
if (s.length() == n) {
//System.out.println(s);
char c[] = s.toCharArray();
pailie(0, c);
}
// 先取字符的第一位,然后判断长度是否够题目要求。如果够就得了一个组合。否则继续取下一位加上第一位。再判断。以此类推
for (int k =i; k < str.length(); k++) {
s = temp;
s += str.charAt(k);
zuhe(s, k+1);
}
}
//排列的算法
// 先对字符最后俩位进行全排列,也就是交换。然后再对最后三位进行全排列。也就是在前一个全排列的基础上进行交换。以此类推。直到字符串的第一位。
public static void pailie(int i, char[] c) {
if (i == c.length - 1) {
for (char d : c) {
System.out.print(d + " ");
}
System.out.println();
} else {
for (int k = i; k < c.length; k++) {
// 交换
char temp = c[i];
c[i] = c[k];
c[k] = temp;
// 进行递归
pailie(i + 1, c);
// 还原数组
temp = c[k];
c[k] = c[i];
c[i] = temp;
}
}
}
}
分享到:
相关推荐
printf("结果字符串p: %s\n", s3); return 0; } ``` ### 4. 代码解析 - **输入**:程序首先提示用户输入字符串`s`和`t`。 - **处理**:调用`fun`函数处理输入的字符串。 - **输出**:输出结果字符串`p`。 ### 5...
4. **字符串排列组合问题**: - 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符...
**知识点解释**:此函数通过冒泡排序算法对字符串中的字符进行升序排列。外部循环控制排序的轮数,内部循环则负责每一轮中的相邻元素交换工作,以确保较大的元素逐渐“冒泡”到数组的后部。 ### 分段排序 #### ...
标题 "(ABCDE)字符串排序" 描述了一个使用C++编程语言实现字符串排列的问题。通过四种不同的模板和系统函数,特别是利用`string_permutation`方法,我们可以生成一个字符串的所有可能排列。这种排列通常涉及到...
在字符串的排列问题中,n即为字符串的长度,m也为n,因为排列要求使用字符串中的每一个字符。排列的总数为n的阶乘(n!)。对于排列的每一个位置,我们都必须考虑其它所有可能的字符,这就是排列问题的复杂性所在。 ...
本文将深入探讨如何将一个十进制整数m转换成2至16进制的字符串,重点使用VB6.0(Visual Basic 6.0)编程语言进行源代码编写。VB6.0是微软公司开发的一款面向对象的可视化编程工具,它提供了丰富的控件和函数库,使得...
_ _ _ _ _ _ _ _ _ _ _ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ ...查找字符串B的所有排列的公式为P(n,r)= n! (nr)!; 知道一点大惊叹号是一件坏事;)。 因此,在第一个强力解决方案之后,
- 易语言的变量类型:易语言支持整型、浮点型、字符串等多种数据类型,选择合适的类型来存储元素数量和结果非常重要。 - 循环结构:易语言的循环语句,如“循环”、“直到”等,是实现递归或迭代算法的基础。 - 函数...
// i和j用于循环控制,n表示输入的字符串数量 // 输入n个字符串 for(i = 0; i < n; i++) scanf("%s", str[i]); // 冒泡排序 for(i = 0; i < n; i++) for(j = 0; j < n - i; j++) if(strcmp(str[j], str[j + 1]...
例如,字符串"abc"的全排列包括"abc", "acb", "bac", "bca", "cab", 和 "cba"。 递归是一种解决全排列问题的有效方法。下面是一种基本的递归实现策略: 1. 当字符串为空或只剩下一个字符时,打印当前排列(因为...
在这个部分,我们有一个字符串排序的函数,它接受一个二维字符数组`a[M][N]`作为参数。函数使用冒泡排序算法对字符串进行升序排列。冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列,比较相邻元素并交换...
题目要求我们将一个字符串的前n个字符复制到另一个字符数组中去。需要注意的是,这里不允许使用`strcpy`函数。 **关键步骤:** - **读取输入:** 读取一个字符串及一个整数n。 - **复制字符:** 使用循环将字符串的...
本项目是基于C#语言实现的n选m组合算法,能够处理各种类型的数据,包括数字、字符串甚至是自定义的对象。下面我们将深入探讨这个算法的实现原理和C#中的关键概念。 首先,组合算法的核心思想是无序性,即选取的m个...
给定两个字符串,求串a中的每个字符是否可以在串b中找到对应的字符,串b中的每个字符只可以使用一次,但是字符可以重复出现。 2017年4月14日 349 求两个数组的交集,不允许出现重复的数字。 404 求左子树节点之和。 ...
本文将详细介绍如何使用Go语言来解决一个具体的排列组合问题:从n个数中选取m个数的所有可能组合,并通过一个实际的示例来展示其实现过程。 #### 二、组合问题解析 组合是指从n个不同元素中取出m(m≤n)个元素并组成...
这通常需要将字符串形式的m进制数逐位转换为十进制。例如,对于二进制数"1011",我们可以遍历每一位,每遇到1就乘以2的相应次方(从右到左,次方递减),然后累加。 2. **10进制转换**:将m进制数转换为10进制,这...
- 空间复杂度主要取决于字符串的最大长度,即 \( O(N * L) \),其中 \( L \) 为字符串的最大长度。 通过上述分析,我们可以了解到该问题的基本解决思路及其实现细节。这种方法适用于处理相对较小规模的数据集。...
这种方法创建一个包含所有可能字符的字符串,然后通过循环和`Math.random()`对字符串进行随机排列,从而生成指定长度的随机字符串。 ```javascript function randomString(length) { var str = '0123456789...