1. 程式人生 > >【劍指Offer】字串全排列

【劍指Offer】字串全排列

題目描述

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

輸入描述

輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

思路分析

遞迴的思路暫時還存在問題!!!!

程式碼實現

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
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; } private void PermutationHelper(char[] str,int
n,List<String> res){ if(n == str.length){ res.add(String.valueOf(str)); } int i = n; for(int j = i; j < str.length; j++){ if(i != j && str[i] == str[j]){ continue; } swap(str,i,j); PermutationHelper(str,i+1
,res); swap(str,i,j); } } /** * 交換字串中的兩個字元 */ private void swap(char[] str,int i,int j){ char temp = str[i]; str[i] = str[j]; str[j] = temp; } }