📅  最后修改于: 2023-12-03 14:50:46.824000             🧑  作者: Mango
这是ISRO CS 2013考试中的第55题,要求应聘者设计一个程序,可以在一个字符串中查找所有排列的可能性。
给定字符串s,你的任务是打印出字符串中所有可能的排列。
def permutation(s, i, n):
if i == n:
print(s)
else:
for j in range(i, n + 1):
s[i], s[j] = s[j], s[i]
permutation(s, i + 1, n)
s[i], s[j] = s[j], s[i]
s = list(input())
n = len(s)
permutation(s, 0, n - 1)
public class Solution {
public void permutation(char[] s, int i, int n) {
if (i == n) {
System.out.println(String.valueOf(s));
} else {
for (int j = i; j <= n; j++) {
swap(s, i, j);
permutation(s, i + 1, n);
swap(s, i, j);
}
}
}
public void swap(char[] s, int i, int j) {
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
public static void main(String[] args) {
String str = "abc";
char[] s = str.toCharArray();
int n = s.length;
Solution solution = new Solution();
solution.permutation(s, 0, n - 1);
}
}
该程序使用递归的方式,从字符串的第一个字符开始,每次将当前字符与后面的字符进行交换,直到达到字符串结尾。在递归的过程中,每次交换后,再将当前字符交换回来,确保不会重复输出。
Python实现使用了Python中list对象的函数,可以直接交换其中元素的值。
Java实现使用char数组,需要手动编写swap方法。需要注意的是,在Java中,char数组不能直接转为String类型,需要使用String.valueOf()方法转换。