用java语言实现递归方法打印给定字符串中所有字符的排列。比如当给定 字符串 String str = ”abc”; 你的程序应能打印出(字符串出现顺序可以和下面给出的顺序不同) abc acb bac bca cab cba
时间: 2024-05-27 12:11:55 浏览: 10
public class StringPermutation {
public static void main(String[] args) {
String str = "abc";
permutation(str.toCharArray(), 0, str.length() - 1);
}
public static void permutation(char[] arr, int start, int end) {
if (start == end) {
System.out.println(arr);
} else {
for (int i = start; i <= end; i++) {
swap(arr, start, i);
permutation(arr, start + 1, end);
swap(arr, start, i);
}
}
}
public static void swap(char[] arr, int i, int j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
相关问题
字符串的排列 java
字符串的排列是指对给定的字符串进行全排列,即将字符串中的字符重新排列,找出所有可能的排列组合。
如果给定的字符串是空字符串或者长度为1的字符串,那么它的排列只有它自身。
对于长度大于等于2的字符串,可以通过递归的方式来进行排列。可以将字符串分为两部分,第一个字符和剩下的字符。首先固定第一个字符,然后对剩下的字符进行全排列。接着固定第二个字符,对剩下的字符进行全排列,以此类推。
具体的实现可以采用回溯法,通过递归和交换字符的方式,依次固定每个字符,然后对剩下的字符进行全排列。当递归到最后一个字符时,就得到了一个完整的排列。将每个完整的排列添加到结果集中。
下面是一个使用递归实现字符串排列的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
public class StringPermutation {
public List<String> getPermutation(String str) {
List<String> result = new ArrayList<>();
if (str == null || str.length() == 0) {
return result;
}
permutation(str.toCharArray(), 0, result);
return result;
}
private void permutation(char[] chars, int start, List<String> result) {
if (start == chars.length - 1) {
result.add(String.valueOf(chars));
} else {
for (int i = start; i < chars.length; i++) {
swap(chars, start, i);
permutation(chars, start + 1, result);
swap(chars, start, i);
}
}
}
private void swap(char[] chars, int i, int j) {
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
```
以上代码实现了一个`getPermutation`方法,该方法将给定的字符串进行排列,并将结果存储在一个列表中。方法中使用递归和交换字符的方式来实现排列。最终返回的结果是一个包含所有排列的字符串列表。
使用该方法可以对任意字符串进行排列,如:"abc"的全排列为["abc", "acb", "bac", "bca", "cab", "cba"]。
总结就是,字符串的排列可以通过递归和交换字符的方式来实现,找出所有可能的排列组合。以上就是一个使用Java实现字符串排列的示例代码。
c ++ 打印字符串_C ++程序打印字符串的所有子序列
以下是一个C++程序,用于打印给定字符串的所有子序列:
```c++
#include <iostream>
#include <string>
using namespace std;
void printSubsequences(string str, string output = "") {
if (str.empty()) {
cout << output << endl;
return;
}
printSubsequences(str.substr(1), output);
printSubsequences(str.substr(1), output + str[0]);
}
int main() {
string str = "abc";
printSubsequences(str);
return 0;
}
```
这个程序使用递归的方式,每次将字符串分为两部分:第一个字符和剩余的字符。对于第一个字符,我们可以选择包含它或不包含它。最终,我们可以找到所有可能的子序列。在上面的程序中,我们使用了一个默认参数来保存输出字符串。在每次递归调用时,我们可以选择将当前字符包含在输出字符串中,或者不包含在输出字符串中。最终,所有的子序列都将被打印出来。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)