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

来源:互联网 发布:淘宝怎么用余额宝分期 编辑:程序博客网 时间:2024/05/18 03:20

题目:

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


这里用递归比较好:

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

第一个是b,剩下的问ac

第一个是c,剩下的问ab

那么方法就有了:

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

代码:

package com.aii.algorithm;public class Permutation {/** * 输入一个字符串,打印出该字符串中字符的所有排列。<br/> * 例如输入字符串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.lengthif (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);}}}


0 0