剑指offer(27)字符串的排列

import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public ArrayList<String> Permutation(String str) {
       ArrayList<String> result = new ArrayList<String>();
        if(str.length()!= 0 && str.length() > 0){
            Helper(str.toCharArray(),0,result);
            Collections.sort(result);//将所有排列组合的可能按照字典序排列出来
        }
        return result;
    }
    public void Helper(char[] ch,int i ,ArrayList list){
        if(i == ch.length-1){
            String val = String.valueOf(ch);
            if(!list.contains(val)){
                list.add(val);//去重,将所有的排列放到list中
            }
        }else{
                for(int j = i;j < ch.length;j++){//
                    swap(ch,i,j);//固定第一位
                    Helper(ch,i+1,list);//将除了定位过的元素进行排列
                    swap(ch,i,j);//复原,回溯,重新选择第一位
                }
            }
        }
        public void swap(char[] ch,int i ,int j){//交换方法
            char c = ch[i];
            ch[i] = ch[j];
            ch[j] = c;
        }
    }
 

猜你喜欢

转载自blog.csdn.net/qq_34403001/article/details/88943855