字符串的排列

本贴最后更新于 2265 天前,其中的信息可能已经事过景迁

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。

解题思路

  • 基于回溯法

回溯法示意图

代码

import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> ret = new ArrayList<>();
        if (str == null || str.length() == 0)
            return ret;
        helper(str.toCharArray(), 0, ret);
        Collections.sort(ret);
        return ret;
    }
    
    private void helper(char[] cs, int swapIndex, ArrayList<String> ret) {
        if (swapIndex == cs.length-1) {
            String val = String.valueOf(cs);
            if (!ret.contains(val))
                ret.add(val);
        } else {
            for (int j = swapIndex; j < cs.length; j++) {
                swap(cs, swapIndex, j);
                helper(cs,swapIndex+1, ret);
                swap(cs, swapIndex, j);
            }
        }
    }
    
    private void swap(char[] cs, int pre, int post) {
        char tmp = cs[pre];
        cs[pre] = cs[post];
        cs[post] = tmp;
    }
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...