【编程题】字符串的排列(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; } }