一、概念
现有一个字符串,要打印出该字符串中可重复使用该字符串中的所有字符的全排列。例如输入字符串ab,则打印出由字符a、b所能排列出来的可重复使用所有字符的所有字符串aa、ab、ba、bb。
相当于每个位置都可以选择字符数组中的任何一个字符。
可以基于递归算法来解决这个问题。
二、代码
public Permutation {
public static void main(String[] args) {
char[] array = {'a', 'b'};
//调用全排列函数
permutation(new char[array.length], array, 0);
}
/**
* 调用全排列函数
* 第一个参数:临时存储字符数组,大小和入参array长度一致
* 第二个参数:入参数组
* 第三个参数:数组起始索引,从0开始
*/
public static void permutation(char[] buf, char[] array, int index) {
//处理到入参数组的最后一个位置后,进行输出打印并使递归返回
if (index == array.length) {
for (int i = 0; i < array.length; ++i) {
System.out.print(buf[i]);
}
System.out.println();
return;
}
for (int i = 0; i < array.length; i++) {
//从索引位置len开始赋值给临时字符数组
buf[index] = array[i];
//索引位置加1,继续递归
permutation(buf, array, index + 1);
}
}
}
致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。
若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢。您的支持是我们为您提供帮助的最大动力。