剑指Offer面试题(第二十三天)面试题38

* 面试题38:字符串的排列


     * 题目:输入一个字符串,打印该字符串中字符的所有排列。
     * 例如:输入字符串abc,打印出字符a、b、c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba
     * 
     * 思路:将字符串的多个位置拆分成  ==> 第一个字符+其他字符
     * 第一步:第一个字符可以是字符串中的任意一个
     * 第二步:剩下的其他字符又可以拆成==> 第一个字符+其他字符
     * 。。。。
     * 以此类推  这是一个递归的过程
     * 分为两步实现:处理第一个字符  
     *             处理剩余字符 (使剩余字符中的第一个字符   重新作为   一个新的第一个字符)
     *             。。。直到走到最后一个字符 

package Test;

import java.util.ArrayList;
import java.util.TreeSet;

public class No38Permutation {

	/*
	 * 面试题38:字符串的排列
	 * 题目:输入一个字符串,打印该字符串中字符的所有排列。
	 * 例如:输入字符串abc,打印出字符a、b、c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba
	 * 
	 * 思路:将字符串的多个位置拆分成  ==> 第一个字符+其他字符
	 * 第一步:第一个字符可以是字符串中的任意一个
	 * 第二步:剩下的其他字符又可以拆成==> 第一个字符+其他字符
	 * 。。。。
	 * 以此类推  这是一个递归的过程
	 * 分为两步实现:处理第一个字符  
	 * 			处理剩余字符 (使剩余字符中的第一个字符   重新作为   一个新的第一个字符)
	 * 			。。。直到走到最后一个字符 
	 * 
	 * */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		No38Permutation p = new No38Permutation();
		
		
		String s = "abc";
		ArrayList arrayString = p.Permutation(s);
		System.out.println(arrayString);
	}

	TreeSet set;
	//字符串的全排列
	public ArrayList Permutation(String s) {
		// TODO Auto-generated method stub
		if(s == null || s.trim().length() == 0)
			return new ArrayList<>();
		//将字符串转换为数组形式
		char[] chars = s.toCharArray();
		set = new TreeSet<>();
		Permutation(chars,0);
		return new ArrayList<>(set);
	}

	private void Permutation(char[] chars, int index) {
		// TODO Auto-generated method stub
	
		//索引index  指向排列操作的字符串的第一个字符的位置
		//表示已经index到最后一个字符了   已经完成了一次排列  
		if(index == chars.length - 1) {
			set.add(new String(chars));
			return ;
		}
		//否则,从index开始遍历 将第一个字符和后面的字符进行逐个交换
		for(int i = index;i < chars.length;i++) {
			//交换第i位和第index位交换
			swap(chars,i,index);
			//再从第index+1个字符开始进行排列操作
			Permutation(chars,index+1);
			//再交换第i位和第index位   恢复原位
			swap(chars,i,index);
		}
		
		
	}

	//交换两个字符
	public void swap(char[] chars, int i, int index) {
		// TODO Auto-generated method stub
		char c = chars[i]; 
		chars[i] = chars[index];
		chars[index] = c;
	}

	

	
	
}

 

你可能感兴趣的:(面试)