剑指offer25--字符串所以排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc。则打印出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac 、bca、cab 和cba 。

剑指offer25--字符串所以排列_第1张图片
如上图所示,原来字符串是abcd的顺序,第一次a分别和bcd交换顺序,当a和b交换的情况下,再从a开始分别和cd交换,最后就可以打印所以的情况。实际上就是递归。
package 剑指offer;
/*题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc。
 *则打印出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab 和cba 。*/
public class Test28 {
	public static void printStringAll(String string){
		// 将字符串转换成字符数组
		char str[] = string.toCharArray();
		printStringAll(str, 0);
	}
	
	// 搞来搞去,还是递归啊
	public static void printStringAll(char []str, int begin){
		// 如果是最后一个元素,直接打印
		if(str.length - 1 == begin){
			System.out.print(new String(str) + " ");
		}else{
			char temp;
			// 是从begin开始向后交换所不会出现重复
			for(int i = begin; i < str.length; i++){
				temp = str[begin];
				str[begin] = str[i];
				str[i] = temp;
				
				printStringAll(str, begin+1);
			}
		}
	}
	
	public static void main(String args[]){
		String string1 = "abc";
		String string2 = "abcd";
		
		printStringAll(string1);
		System.out.println();
		printStringAll(string2);
	}
}


递归还是要先明确哪几个参数需要递归

你可能感兴趣的:(java,字符串,排列情况)