如“abc”输出结果为:“abc”,“acb”,“bac”,“bca”,“cab”,“cba”
public class AllCombString {
public static int t;//组合个数
public static void main(String[] args) {
String str = "123";
char[] c = str.toCharArray();
println(c)
t++;
allCombString(c,0);
System.out.println(t);
}
public static void allCombString(char[] c,int s){
int l = c.length;
if(l-s==2){
char temp = c[l-1];
c[l-1] = c[l-2];
c[l-2] = temp;
println(c);
t++;
}
else{
for(int i=s;i<l;i++){
moveToHead(c,i,s);
char ct[] = new char[l];
System.arraycopy(c, 0, ct, 0, l);//保持其他元素位置不变
allCombString(ct,s+1);
}
}
}
public static void moveToHead(char[] c,int id,int s){
if(id>s&&id<c.length){
char temp = c[id];
for(int i=id;i>s;i--){
c[i] = c[i-1];
}
c[s] = temp;
println(c);
t++;
}
}
public static void println(char[] c){
System.out.println(new String(c));
}
}
输出结果:
123
132
213
231
321
312
6
设计思路:
1、n个字符,顺序选取其中第1个;
2、在剩下的n-1个字符中,再选取其中的第1个;
3、若剩余的字符只剩下2个,则这两个字符交换位置;若不是,则继续第2步。
4、这是一个典型的递归,无论有多少个字符,到最后只需交换最后两个字符即可。
5、为了能按顺序选取字符(因为递归之后会影响字符的顺序,如:“abcd”经过第一轮递归之后变成“adbc”,这时再执行第2步的话,取到的字符是“d”,而不是“b”),所以这里使用了数组拷贝,for循环不受递归的影响。(这个问题想了老半天,暂时只能用这种方法,即使效率比较低)。
6、组合的个数是字符个数的阶层,如“abc”,组合个数为3!=6
不知道大家有没有更好的方式
分享到:
相关推荐
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...
2. **添加新方法**:为了实现类似Java中的字符串操作,`MyCString`可能会包含一些新的成员函数。例如,可能会有一个`color`函数或`set_color`函数,用于设置字符串输出时的颜色。这些函数可能接受颜色代码(如ANSI...
在Java中,我们可以使用内置的`String`类和`split()`方法来完成单词的分割,`StringBuilder`或`StringBuffer`来进行字符串的拼接,以及`reverse()`方法来实现单词的反转。 1. **单词分割**: 使用`split()`方法,...
Java作为一种广泛使用的编程语言,也提供了一套丰富的转义字符来帮助开发者更好地处理字符串数据。本文将详细介绍Java中的转义字符及其用途,帮助读者更好地理解和应用这些转义字符。 #### 二、基本概念 转义字符...
在Java编程中,将字符串表示的计算公式转化为可执行的表达式并计算其结果是一项常见的需求。这通常涉及到解析字符串,构建表达式树,然后进行求值。在本篇文章中,我们将深入探讨如何实现这个功能。 首先,我们需要...
方法public String toString(),把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,调用上述方法进行验证并实现相应输出。
Java编写的简易记事本是一个基于Java编程语言开发的简单文本编辑器,它允许用户创建、编辑和保存文本文件。这个应用通常包含了基本的文本编辑功能,如新建、打开、保存、复制、粘贴、剪切、查找和替换等。在Java中...
首先,我们需要导入Java的`java.lang`包,因为这个包包含了`String`类和`System.out.println()`方法,它们是处理字符串和输出结果的基础。代码如下: ```java import java.lang.*; ``` 接下来,定义一个主函数`...
Java 输入输出流(I/O 流)是Java编程语言中处理数据传输的核心概念。Java I/O 流系统设计得非常灵活且功能强大,能够处理不同类型的输入和输出,包括文件操作、标准输入输出、网络数据流、字符串流、对象流以及压缩...
##### 题目1:字符串的组合输出 **题目描述**:编写一个函数,输入一个字符串,输出该字符串所有可能的组合形式。 **示例代码**: ```java import java.util.ArrayList; import java.util.List; public class ...
Java可以通过Pinyin4j库转换汉字为拼音,然后使用Levenshtein距离或其他字符串相似度算法比较拼音的相似度。 **概念相似度**涉及到更高层次的语义理解,通常基于本体论或知识图谱。Java的OWL API可以处理OWL(Web ...
### 使用Java正则表达式去除字符串中的重复字符 在日常的软件开发工作中,经常会遇到需要处理字符串的问题。其中,一种常见的需求就是去除字符串中的重复字符。例如,将一个字符串 `...
在这个问题中,我们需要编写一个程序来查找并打印出给定字符串"My name is Tom, I come from China."中的所有大写字母。这涉及到对字符进行遍历和条件判断,是学习基础数据类型和控制流的一个典型示例。以下是一个...
在这个问题中,我们需要编写一个程序来查找并打印给定字符串"My name is Tom, I come from China."中的所有大写字母。这是一个涉及字符串遍历和字符检查的基础练习,它可以帮助我们理解Java中的基本语法和控制流。 ...
在这个特定的例子中,我们需要编写一个程序来查找并打印出给定字符串"My name is Tom, I come from China."中的所有大写字母。以下是一个详细的步骤来实现这个功能: 1. **创建Java类**: 首先,我们需要创建一个...
7. 字符串全组合:使用递归或回溯法,遍历字符串中的每一个字符,每次选择一个字符作为当前组合的一部分,然后递归地处理剩余的字符,直到处理完所有字符,打印所有组合。 8. 外部类与内部类:外部类定义私有成员...
表达式接口:获取字符串方程的值。 最初取自 StackOverflow。 由 StackOverflow 用户编写的代码:Boann 和 由 StackOverflow 用户编写的代码:Mike Scholtes Boann 的代码是免费的 但被我广泛修改。 输入:Java 字符...
- `DateTimeFormatter`:用于日期时间的格式化和解析,可以根据自定义模板转换日期时间对象为字符串,反之亦然。 在实现万年历的过程中,我们需要考虑以下步骤: 1. **获取当前日期**:使用`LocalDate.now()`获取...
本节我们将深入探讨如何编写一个Java程序来解决这个问题,以及相关的字符串处理知识。 首先,我们需要了解Java中的`String`类,它是Java标准库中的核心类之一,提供了大量的方法来处理字符串。在这个问题中,我们...
在运行这个程序后,由于"I am Tom, I am from China"中确实包含了"Tom",所以输出将会是:“子字符串 'Tom' 存在于原始字符串中”。 此外,`README.txt`文件通常用于存储项目的简短说明或指南。在这个例子中,它...