📌  相关文章
📜  国际空间研究组织 | ISRO CS 2013 |问题 55(1)

📅  最后修改于: 2023-12-03 14:50:46.824000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2013 |问题 55

这是ISRO CS 2013考试中的第55题,要求应聘者设计一个程序,可以在一个字符串中查找所有排列的可能性。

问题描述

给定字符串s,你的任务是打印出字符串中所有可能的排列。

代码实现
Python
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)
Java
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实现使用了Python中list对象的函数,可以直接交换其中元素的值。

Java实现

Java实现使用char数组,需要手动编写swap方法。需要注意的是,在Java中,char数组不能直接转为String类型,需要使用String.valueOf()方法转换。

参考资料