首页 > 其他 > 详细

剑指offer-字符串的排列

时间:2020-06-15 19:39:08      阅读:38      评论:0      收藏:0      [点我收藏+]

题目描述

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

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class Solution {
    ArrayList<String> ans = new ArrayList<>();
    public ArrayList<String> Permutation(String str) {
        
        if(str.isEmpty()){
            return ans;
        }
        Set<String> ret = new HashSet<>();
        Rec(0,str,ret);

        return ans;
    }

    public void Rec(int pos, String s, Set<String> ret){
        if(pos+1 == s.length()){
            if(!ret.contains(s)){
                ans.add(s);
            }
            ret.add(s);
            return;
        }

        for (int i = pos; i<s.length(); ++i){
            char[] swap = s.toCharArray();
            char c = swap[i];
            swap[i] = swap[pos];
            swap[pos] = c;
            s = new String(swap);
            Rec(pos+1,s,ret);
            swap = s.toCharArray();
            c = swap[i];
            swap[i] = swap[pos];
            swap[pos] = c;
        }
    }
}

剑指offer-字符串的排列

原文:https://www.cnblogs.com/ZCWang/p/13132826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!