欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现字符串的全排列

程序员文章站 2023-11-27 11:06:10
字符串的全排列,具体内容如下 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,a...

字符串的全排列,具体内容如下

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。

采用递归的思想:

把需要全排列的字符串分为两部分看待:
(1)字符串的第一个字符;
(2)第一个字符后面的所有字符;

求所有可能出现在第一个位置的字符;将第一个字符和后面的字符一次交换;

固定第一个字符,对第一个字符后面的所有字符求全排列。第一个字符后面的所有字符又可以分为两部分;

java代码: 

import java.util.arraylist; 
import java.util.treeset; 
public class solution { 
  public arraylist<string> permutation(string str) { 
    arraylist<string> res = new arraylist<string>(); 
    if(str==null||str.length()==0) 
    { 
      return res; 
    } 
    char[] chararray = str.tochararray(); 
    //输出按照输入字典顺序 
    treeset<string> tempres = new treeset<string>(); 
    permutationcore(chararray,tempres,0); 
    res.addall(tempres); 
    return res; 
     
  } 
  private void permutationcore( char[] chararray,treeset<string> tempres,int loc) 
  { 
    if(chararray==null || chararray.length==0 || loc<0 || loc>chararray.length-1) 
    { 
      return ; 
    } 
    if(loc==chararray.length-1) 
    { 
      tempres.add(string.valueof(chararray));//递归的出口 
    } 
    else 
    { 
      for(int i=loc;i<chararray.length;i++) 
      { 
        swap(chararray,i,loc);//将第一个字符与后面的字符交换 
        permutationcore(chararray,tempres,loc+1);//对后面所有的字符进行全排列 
        swap(chararray,i,loc);//再将之前交换的字符交换回来,以便第一个字符再与其他字符交换 
      } 
        
    } 
  } 
  private void swap(char[] chararray,int i,int j) 
  { 
    char temp = chararray[i]; 
    chararray[i] = chararray[j]; 
    chararray[j] = temp; 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。