剑指offer-字符串的排序
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList; import java.util.Collections; public class Solution { ArrayList<String> re ; public ArrayList<String> Permutation(String str) { re = new ArrayList<String>(); if(str==null||str.length()==0){ return re; } char[] ch= str.toCharArray(); help(ch,0,ch.length-1); Collections.sort(re); return re; } public void help(char[] ch,int left,int right){ if(left ==right){ re.add(String.valueOf(ch)); return; } for(int i = left;i<=right;i++){ if(i==left||ch[i]!=ch[left]){//字符可能重复 swap(ch,left,i); help(ch,left+1,right); swap(ch,i,left); } } } private void swap(char[] s,int i,int j){ char t = s[i]; s[i] =s[j]; s[j] =t; } }