剑指 Offer 38. 字符串的排列

package leetcode;

import java.util.ArrayList;
import java.util.Arrays;

public class offer_38 {
    public String[] permutation(String s) {
        //将字符串转换成数组并排序
        char[] ch= s.toCharArray();
        Arrays.sort(ch);
        int[] visited=new int[ch.length];
        ArrayList<String> array=new ArrayList<String>();
        backtrace(ch, new StringBuffer(), array, visited);
        String[] ss=new String[array.size()];
        for (int i = 0; i < ss.length; i++) {
            ss[i]=array.get(i);
        }
        System.out.println(array);
        return ss;
        
    }
    
    public void backtrace(char[] ch,StringBuffer sb,ArrayList<String> array,int[] visited) {
        if(sb.length()==ch.length) {
            array.add(sb.toString());
        }
        else {
            for(int i=0;i<ch.length;i++) {
                if(visited[i]!=0) {continue;}
                //去除重复
                if(i>0&&ch[i]==ch[i-1]&&visited[i-1]==0) {continue;}
                visited[i]=1;
                sb.append(ch[i]);
                backtrace(ch, sb, array, visited);
                visited[i]=0;
                sb.deleteCharAt(sb.length()-1);
            }
        }
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        offer_38 off=new offer_38();
        off.permutation("abc");
    }

}

 

posted on 2022-03-31 11:39  一仟零一夜丶  阅读(23)  评论(0)    收藏  举报