使用Java语言给定一个字符串,设计一个算法完成对该字符串的一个全排列的输出。比如:字符串 “abc”,输出结果应该是“abc”、“acb”、“bac”、“bca”、“cab” 和 “cba”。 要求:①使用递归思想,编写一个函数 permutationByRecursion,该函数用来生成给定的字符 串的全排列结果。②使用栈数据结构,将①中编写的算法转换成非递归函数,函数名为: permutationByNoRecursion。(利用课堂上讲解的分解 Hanoi 塔的任务方式),该函数所使用的栈 数据结构只能使用自己定义的栈数据结构,不能使用任何语言提供的栈
时间: 2023-04-04 18:03:17 浏览: 71
permutationByRecursion函数的代码如下:
```
public static void permutationByRecursion(String str, int start, int end) {
if (start == end) {
System.out.println(str);
} else {
for (int i = start; i <= end; i++) {
str = swap(str, start, i);
permutationByRecursion(str, start + 1, end);
str = swap(str, start, i);
}
}
}
public static String swap(String str, int i, int j) {
char[] charArray = str.toCharArray();
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
```
permutationByNoRecursion函数的代码如下:
```
public static void permutationByNoRecursion(String str) {
Stack<String> stack = new Stack<>();
stack.push(str);
while (!stack.isEmpty()) {
String current = stack.pop();
if (current.length() == str.length()) {
System.out.println(current);
} else {
for (int i = current.length() - 1; i >= 0; i--) {
String newStr = swap(current, i, current.length() - 1);
stack.push(newStr);
}
}
}
}
public static String swap(String str, int i, int j) {
char[] charArray = str.toCharArray();
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
class Stack<T> {
private List<T> list = new ArrayList<>();
public void push(T item) {
list.add(item);
}
public T pop() {
T item = list.get(list.size() - 1);
list.remove(list.size() - 1);
return item;
}
public boolean isEmpty() {
return list.isEmpty();
}
}
```
阅读全文
相关推荐


















