剑指offer面试题28-字符串的排列

题目:

/**
* 输入一个字符串,打印出该字符串中字符的所有排列。

* 例如输入字符串abc,则打印出由字符串abc所能排列出来的所有字符串abc,acb,bca,cab和cba。
* */


这里用递归比较好:

第一个是a,那么剩下的就问bc的排列有多少种

第一个是b,剩下的问ac

第一个是c,剩下的问ab

那么方法就有了:

当前这个数分别与他后面的数交换位置,然后求后面的有多少中排列。

代码:

package com.aii.algorithm;

public class Permutation {

	/**
	 * 输入一个字符串,打印出该字符串中字符的所有排列。
* 例如输入字符串abc,则打印出由字符串abc所能排列出来的所有字符串abc,acb,bca,cab和cba。 * */ public void permutate(char[] str) { if (str == null) { return; } // 先判断空,然后再由permutate方法操作 // 第二个参数是当前的字符的角标 permutate(str, 0); } private void permutate(char[] str, int index) { // 此次递归结束标记,即到了str的最大长度,index==str.length if (index == str.length) { for (int i = 0; i < str.length; i++) { System.out.print(str[i]); } System.out.println(); return; } // 从i=index到i=str.length-1为止 // index和i交换位置,然后查找子串,递归 for (int i = index; i < str.length; i++) { char tmp = str[index]; str[index] = str[i]; str[i] = tmp; permutate(str, index + 1); } } }


你可能感兴趣的:(数据结构,算法题解-java)