【編程題】字符串的排列(Java實現)

【編程題】字符串的排列(Java實現)

題目來源

劍指offer第27題
https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13&tqId=11180&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

題目描述

輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。
輸入描述:
輸入一個字符串,長度不超過9(可能有字符重複),字符只包括大小寫字母。

題目代碼

import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
      ArrayList<String>list=new ArrayList<String>();
        if(str==null)
            return list;
         permutation(str.toCharArray(),0,list);
        Collections.sort(list);
        return list;
    }
    void permutation(char[] str,int index,ArrayList<String>list){
        if(index==str.length-1){
            if(!list.contains(String.valueOf(str)))
            list.add(String.valueOf(str));
        }else{
            Set<Character>set=new HashSet<>();
            for(int i=index;i<str.length;i++){
              if(i==index||!set.contains(str[i])){
                  set.add(str[i]);
                swap(str,i,index);
                permutation(str,index+1,list);
                swap(str,i,index);
              }
            }
        }
        
    }
    void swap(char[] str,int i,int j){
        char tem=str[i];
        str[i]=str[j];
        str[j]=tem;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章