1. 程式人生 > >面試題:字符串的全排列

面試題:字符串的全排列

width pan string || per 回溯法 圖片標題 [] 描述

題目描述:輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。

思路:回溯法,求全排列求集合的全部子集

技術分享圖片

代碼:

import java.util.List;
import java.util.Collections;
import java.util.ArrayList;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList
<String> res=new ArrayList<>(); if (str==null||str.length()==0) return res; PermutationHelper(str.toCharArray(),0,res); Collections.sort(res); return res; } public void PermutationHelper(char[] cs,int i,ArrayList<String> list){ if(i==cs.length-1){//
不是太懂這一步 String val=String.valueOf(cs); if (!list.contains(val)) list.add(val); }else{ for (int j=i;j<cs.length;j++){ swap(cs,i,j); PermutationHelper(cs,i+1,list); swap(cs,i,j); } } }
public void swap(char[] cs,int i,int j){ char temp =cs[i]; cs[i]=cs[j]; cs[j]=temp; } }

面試題:字符串的全排列